parent
326f0cfa2f
commit
5c292c61c6
1437 changed files with 208886 additions and 87131 deletions
18
vendor/github.com/letsencrypt/boulder/core/challenges.go
generated
vendored
18
vendor/github.com/letsencrypt/boulder/core/challenges.go
generated
vendored
|
|
@ -1,5 +1,7 @@
|
|||
package core
|
||||
|
||||
import "fmt"
|
||||
|
||||
func newChallenge(challengeType AcmeChallenge, token string) Challenge {
|
||||
return Challenge{
|
||||
Type: challengeType,
|
||||
|
|
@ -25,3 +27,19 @@ func DNSChallenge01(token string) Challenge {
|
|||
func TLSALPNChallenge01(token string) Challenge {
|
||||
return newChallenge(ChallengeTypeTLSALPN01, token)
|
||||
}
|
||||
|
||||
// NewChallenge constructs a random challenge of the given kind. It returns an
|
||||
// error if the challenge type is unrecognized. If token is empty a random token
|
||||
// will be generated, otherwise the provided token is used.
|
||||
func NewChallenge(kind AcmeChallenge, token string) (Challenge, error) {
|
||||
switch kind {
|
||||
case ChallengeTypeHTTP01:
|
||||
return HTTPChallenge01(token), nil
|
||||
case ChallengeTypeDNS01:
|
||||
return DNSChallenge01(token), nil
|
||||
case ChallengeTypeTLSALPN01:
|
||||
return TLSALPNChallenge01(token), nil
|
||||
default:
|
||||
return Challenge{}, fmt.Errorf("unrecognized challenge type %q", kind)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
8
vendor/github.com/letsencrypt/boulder/core/interfaces.go
generated
vendored
8
vendor/github.com/letsencrypt/boulder/core/interfaces.go
generated
vendored
|
|
@ -7,8 +7,8 @@ import (
|
|||
// PolicyAuthority defines the public interface for the Boulder PA
|
||||
// TODO(#5891): Move this interface to a more appropriate location.
|
||||
type PolicyAuthority interface {
|
||||
WillingToIssue(domain identifier.ACMEIdentifier) error
|
||||
WillingToIssueWildcards(identifiers []identifier.ACMEIdentifier) error
|
||||
ChallengesFor(domain identifier.ACMEIdentifier) ([]Challenge, error)
|
||||
ChallengeTypeEnabled(t AcmeChallenge) bool
|
||||
WillingToIssueWildcards([]identifier.ACMEIdentifier) error
|
||||
ChallengesFor(identifier.ACMEIdentifier) ([]Challenge, error)
|
||||
ChallengeTypeEnabled(AcmeChallenge) bool
|
||||
CheckAuthz(*Authorization) error
|
||||
}
|
||||
|
|
|
|||
108
vendor/github.com/letsencrypt/boulder/core/objects.go
generated
vendored
108
vendor/github.com/letsencrypt/boulder/core/objects.go
generated
vendored
|
|
@ -2,7 +2,6 @@ package core
|
|||
|
||||
import (
|
||||
"crypto"
|
||||
"crypto/x509"
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
|
|
@ -11,7 +10,8 @@ import (
|
|||
"strings"
|
||||
"time"
|
||||
|
||||
"gopkg.in/square/go-jose.v2"
|
||||
"golang.org/x/crypto/ocsp"
|
||||
"gopkg.in/go-jose/go-jose.v2"
|
||||
|
||||
"github.com/letsencrypt/boulder/identifier"
|
||||
"github.com/letsencrypt/boulder/probs"
|
||||
|
|
@ -52,7 +52,6 @@ const (
|
|||
type AcmeChallenge string
|
||||
|
||||
// These types are the available challenges
|
||||
// TODO(#5009): Make this a custom type as well.
|
||||
const (
|
||||
ChallengeTypeHTTP01 = AcmeChallenge("http-01")
|
||||
ChallengeTypeDNS01 = AcmeChallenge("dns-01")
|
||||
|
|
@ -78,47 +77,18 @@ const (
|
|||
OCSPStatusRevoked = OCSPStatus("revoked")
|
||||
)
|
||||
|
||||
var OCSPStatusToInt = map[OCSPStatus]int{
|
||||
OCSPStatusGood: ocsp.Good,
|
||||
OCSPStatusRevoked: ocsp.Revoked,
|
||||
}
|
||||
|
||||
// DNSPrefix is attached to DNS names in DNS challenges
|
||||
const DNSPrefix = "_acme-challenge"
|
||||
|
||||
// CertificateRequest is just a CSR
|
||||
//
|
||||
// This data is unmarshalled from JSON by way of RawCertificateRequest, which
|
||||
// represents the actual structure received from the client.
|
||||
type CertificateRequest struct {
|
||||
CSR *x509.CertificateRequest // The CSR
|
||||
Bytes []byte // The original bytes of the CSR, for logging.
|
||||
}
|
||||
|
||||
type RawCertificateRequest struct {
|
||||
CSR JSONBuffer `json:"csr"` // The encoded CSR
|
||||
}
|
||||
|
||||
// UnmarshalJSON provides an implementation for decoding CertificateRequest objects.
|
||||
func (cr *CertificateRequest) UnmarshalJSON(data []byte) error {
|
||||
var raw RawCertificateRequest
|
||||
err := json.Unmarshal(data, &raw)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
csr, err := x509.ParseCertificateRequest(raw.CSR)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
cr.CSR = csr
|
||||
cr.Bytes = raw.CSR
|
||||
return nil
|
||||
}
|
||||
|
||||
// MarshalJSON provides an implementation for encoding CertificateRequest objects.
|
||||
func (cr CertificateRequest) MarshalJSON() ([]byte, error) {
|
||||
return json.Marshal(RawCertificateRequest{
|
||||
CSR: cr.CSR.Raw,
|
||||
})
|
||||
}
|
||||
|
||||
// Registration objects represent non-public metadata attached
|
||||
// to account keys.
|
||||
type Registration struct {
|
||||
|
|
@ -169,11 +139,6 @@ type ValidationRecord struct {
|
|||
// ...
|
||||
// }
|
||||
AddressesTried []net.IP `json:"addressesTried,omitempty"`
|
||||
|
||||
// OldTLS is true if any request in the validation chain used HTTPS and negotiated
|
||||
// a TLS version lower than 1.2.
|
||||
// TODO(#6011): Remove once TLS 1.0 and 1.1 support is gone.
|
||||
OldTLS bool `json:"oldTLS,omitempty"`
|
||||
}
|
||||
|
||||
func looksLikeKeyAuthorization(str string) error {
|
||||
|
|
@ -372,9 +337,6 @@ type Authorization struct {
|
|||
// slice and the order of these challenges may not be predictable.
|
||||
Challenges []Challenge `json:"challenges,omitempty" db:"-"`
|
||||
|
||||
// This field is deprecated. It's filled in by WFE for the ACMEv1 API.
|
||||
Combinations [][]int `json:"combinations,omitempty" db:"combinations"`
|
||||
|
||||
// Wildcard is a Boulder-specific Authorization field that indicates the
|
||||
// authorization was created as a result of an order containing a name with
|
||||
// a `*.`wildcard prefix. This will help convey to users that an
|
||||
|
|
@ -398,38 +360,25 @@ func (authz *Authorization) FindChallengeByStringID(id string) int {
|
|||
// SolvedBy will look through the Authorizations challenges, returning the type
|
||||
// of the *first* challenge it finds with Status: valid, or an error if no
|
||||
// challenge is valid.
|
||||
func (authz *Authorization) SolvedBy() (*AcmeChallenge, error) {
|
||||
func (authz *Authorization) SolvedBy() (AcmeChallenge, error) {
|
||||
if len(authz.Challenges) == 0 {
|
||||
return nil, fmt.Errorf("Authorization has no challenges")
|
||||
return "", fmt.Errorf("Authorization has no challenges")
|
||||
}
|
||||
for _, chal := range authz.Challenges {
|
||||
if chal.Status == StatusValid {
|
||||
return &chal.Type, nil
|
||||
return chal.Type, nil
|
||||
}
|
||||
}
|
||||
return nil, fmt.Errorf("Authorization not solved by any challenge")
|
||||
return "", fmt.Errorf("Authorization not solved by any challenge")
|
||||
}
|
||||
|
||||
// JSONBuffer fields get encoded and decoded JOSE-style, in base64url encoding
|
||||
// with stripped padding.
|
||||
type JSONBuffer []byte
|
||||
|
||||
// URL-safe base64 encode that strips padding
|
||||
func base64URLEncode(data []byte) string {
|
||||
var result = base64.URLEncoding.EncodeToString(data)
|
||||
return strings.TrimRight(result, "=")
|
||||
}
|
||||
|
||||
// URL-safe base64 decoder that adds padding
|
||||
func base64URLDecode(data string) ([]byte, error) {
|
||||
var missing = (4 - len(data)%4) % 4
|
||||
data += strings.Repeat("=", missing)
|
||||
return base64.URLEncoding.DecodeString(data)
|
||||
}
|
||||
|
||||
// MarshalJSON encodes a JSONBuffer for transmission.
|
||||
func (jb JSONBuffer) MarshalJSON() (result []byte, err error) {
|
||||
return json.Marshal(base64URLEncode(jb))
|
||||
return json.Marshal(base64.RawURLEncoding.EncodeToString(jb))
|
||||
}
|
||||
|
||||
// UnmarshalJSON decodes a JSONBuffer to an object.
|
||||
|
|
@ -439,7 +388,7 @@ func (jb *JSONBuffer) UnmarshalJSON(data []byte) (err error) {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
*jb, err = base64URLDecode(str)
|
||||
*jb, err = base64.RawURLEncoding.DecodeString(strings.TrimRight(str, "="))
|
||||
return
|
||||
}
|
||||
|
||||
|
|
@ -534,3 +483,34 @@ type SuggestedWindow struct {
|
|||
type RenewalInfo struct {
|
||||
SuggestedWindow SuggestedWindow `json:"suggestedWindow"`
|
||||
}
|
||||
|
||||
// RenewalInfoSimple constructs a `RenewalInfo` object and suggested window
|
||||
// using a very simple renewal calculation: calculate a point 2/3rds of the way
|
||||
// through the validity period, then give a 2-day window around that. Both the
|
||||
// `issued` and `expires` timestamps are expected to be UTC.
|
||||
func RenewalInfoSimple(issued time.Time, expires time.Time) RenewalInfo {
|
||||
validity := expires.Add(time.Second).Sub(issued)
|
||||
renewalOffset := validity / time.Duration(3)
|
||||
idealRenewal := expires.Add(-renewalOffset)
|
||||
return RenewalInfo{
|
||||
SuggestedWindow: SuggestedWindow{
|
||||
Start: idealRenewal.Add(-24 * time.Hour),
|
||||
End: idealRenewal.Add(24 * time.Hour),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// RenewalInfoImmediate constructs a `RenewalInfo` object with a suggested
|
||||
// window in the past. Per the draft-ietf-acme-ari-00 spec, clients should
|
||||
// attempt to renew immediately if the suggested window is in the past. The
|
||||
// passed `now` is assumed to be a timestamp representing the current moment in
|
||||
// time.
|
||||
func RenewalInfoImmediate(now time.Time) RenewalInfo {
|
||||
oneHourAgo := now.Add(-1 * time.Hour)
|
||||
return RenewalInfo{
|
||||
SuggestedWindow: SuggestedWindow{
|
||||
Start: oneHourAgo,
|
||||
End: oneHourAgo.Add(time.Minute * 30),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
|
|||
1100
vendor/github.com/letsencrypt/boulder/core/proto/core.pb.go
generated
vendored
1100
vendor/github.com/letsencrypt/boulder/core/proto/core.pb.go
generated
vendored
File diff suppressed because it is too large
Load diff
95
vendor/github.com/letsencrypt/boulder/core/proto/core.proto
generated
vendored
95
vendor/github.com/letsencrypt/boulder/core/proto/core.proto
generated
vendored
|
|
@ -1,95 +0,0 @@
|
|||
syntax = "proto3";
|
||||
|
||||
package core;
|
||||
option go_package = "github.com/letsencrypt/boulder/core/proto";
|
||||
|
||||
message Challenge {
|
||||
int64 id = 1;
|
||||
string type = 2;
|
||||
string status = 6;
|
||||
string uri = 9;
|
||||
string token = 3;
|
||||
string keyAuthorization = 5;
|
||||
repeated ValidationRecord validationrecords = 10;
|
||||
ProblemDetails error = 7;
|
||||
int64 validated = 11;
|
||||
}
|
||||
|
||||
message ValidationRecord {
|
||||
string hostname = 1;
|
||||
string port = 2;
|
||||
repeated bytes addressesResolved = 3; // net.IP.MarshalText()
|
||||
bytes addressUsed = 4; // net.IP.MarshalText()
|
||||
|
||||
repeated string authorities = 5;
|
||||
string url = 6;
|
||||
// A list of addresses tried before the address used (see
|
||||
// core/objects.go and the comment on the ValidationRecord structure
|
||||
// definition for more information.
|
||||
repeated bytes addressesTried = 7; // net.IP.MarshalText()
|
||||
}
|
||||
|
||||
message ProblemDetails {
|
||||
string problemType = 1;
|
||||
string detail = 2;
|
||||
int32 httpStatus = 3;
|
||||
}
|
||||
|
||||
message Certificate {
|
||||
int64 registrationID = 1;
|
||||
string serial = 2;
|
||||
string digest = 3;
|
||||
bytes der = 4;
|
||||
int64 issued = 5; // Unix timestamp (nanoseconds)
|
||||
int64 expires = 6; // Unix timestamp (nanoseconds)
|
||||
}
|
||||
|
||||
message CertificateStatus {
|
||||
string serial = 1;
|
||||
reserved 2; // previously subscriberApproved
|
||||
string status = 3;
|
||||
int64 ocspLastUpdated = 4;
|
||||
int64 revokedDate = 5;
|
||||
int64 revokedReason = 6;
|
||||
int64 lastExpirationNagSent = 7;
|
||||
bytes ocspResponse = 8;
|
||||
int64 notAfter = 9;
|
||||
bool isExpired = 10;
|
||||
int64 issuerID = 11;
|
||||
}
|
||||
|
||||
message Registration {
|
||||
int64 id = 1;
|
||||
bytes key = 2;
|
||||
repeated string contact = 3;
|
||||
bool contactsPresent = 4;
|
||||
string agreement = 5;
|
||||
bytes initialIP = 6;
|
||||
int64 createdAt = 7; // Unix timestamp (nanoseconds)
|
||||
string status = 8;
|
||||
}
|
||||
|
||||
message Authorization {
|
||||
string id = 1;
|
||||
string identifier = 2;
|
||||
int64 registrationID = 3;
|
||||
string status = 4;
|
||||
int64 expires = 5; // Unix timestamp (nanoseconds)
|
||||
repeated core.Challenge challenges = 6;
|
||||
reserved 7; // previously combinations
|
||||
reserved 8; // previously v2
|
||||
}
|
||||
|
||||
message Order {
|
||||
int64 id = 1;
|
||||
int64 registrationID = 2;
|
||||
int64 expires = 3;
|
||||
ProblemDetails error = 4;
|
||||
string certificateSerial = 5;
|
||||
reserved 6; // previously authorizations, deprecated in favor of v2Authorizations
|
||||
string status = 7;
|
||||
repeated string names = 8;
|
||||
bool beganProcessing = 9;
|
||||
int64 created = 10;
|
||||
repeated int64 v2Authorizations = 11;
|
||||
}
|
||||
14
vendor/github.com/letsencrypt/boulder/core/util.go
generated
vendored
14
vendor/github.com/letsencrypt/boulder/core/util.go
generated
vendored
|
|
@ -13,9 +13,9 @@ import (
|
|||
"expvar"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"math/big"
|
||||
mrand "math/rand"
|
||||
"os"
|
||||
"reflect"
|
||||
"regexp"
|
||||
"sort"
|
||||
|
|
@ -23,9 +23,11 @@ import (
|
|||
"time"
|
||||
"unicode"
|
||||
|
||||
jose "gopkg.in/square/go-jose.v2"
|
||||
jose "gopkg.in/go-jose/go-jose.v2"
|
||||
)
|
||||
|
||||
const Unspecified = "Unspecified"
|
||||
|
||||
// Package Variables Variables
|
||||
|
||||
// BuildID is set by the compiler (using -ldflags "-X core.BuildID $(git rev-parse --short HEAD)")
|
||||
|
|
@ -182,7 +184,7 @@ func ValidSerial(serial string) bool {
|
|||
func GetBuildID() (retID string) {
|
||||
retID = BuildID
|
||||
if retID == "" {
|
||||
retID = "Unspecified"
|
||||
retID = Unspecified
|
||||
}
|
||||
return
|
||||
}
|
||||
|
|
@ -191,7 +193,7 @@ func GetBuildID() (retID string) {
|
|||
func GetBuildTime() (retID string) {
|
||||
retID = BuildTime
|
||||
if retID == "" {
|
||||
retID = "Unspecified"
|
||||
retID = Unspecified
|
||||
}
|
||||
return
|
||||
}
|
||||
|
|
@ -200,7 +202,7 @@ func GetBuildTime() (retID string) {
|
|||
func GetBuildHost() (retID string) {
|
||||
retID = BuildHost
|
||||
if retID == "" {
|
||||
retID = "Unspecified"
|
||||
retID = Unspecified
|
||||
}
|
||||
return
|
||||
}
|
||||
|
|
@ -245,7 +247,7 @@ func UniqueLowerNames(names []string) (unique []string) {
|
|||
|
||||
// LoadCert loads a PEM certificate specified by filename or returns an error
|
||||
func LoadCert(filename string) (*x509.Certificate, error) {
|
||||
certPEM, err := ioutil.ReadFile(filename)
|
||||
certPEM, err := os.ReadFile(filename)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
|||
56
vendor/github.com/letsencrypt/boulder/errors/errors.go
generated
vendored
56
vendor/github.com/letsencrypt/boulder/errors/errors.go
generated
vendored
|
|
@ -1,7 +1,18 @@
|
|||
// Package errors provides internal-facing error types for use in Boulder. Many
|
||||
// of these are transformed directly into Problem Details documents by the WFE.
|
||||
// Some, like NotFound, may be handled internally. We avoid using Problem
|
||||
// Details documents as part of our internal error system to avoid layering
|
||||
// confusions.
|
||||
//
|
||||
// These errors are specifically for use in errors that cross RPC boundaries.
|
||||
// An error type that does not need to be passed through an RPC can use a plain
|
||||
// Go type locally. Our gRPC code is aware of these error types and will
|
||||
// serialize and deserialize them automatically.
|
||||
package errors
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/letsencrypt/boulder/identifier"
|
||||
)
|
||||
|
|
@ -12,7 +23,10 @@ import (
|
|||
// BoulderError wrapping one of these types.
|
||||
type ErrorType int
|
||||
|
||||
// These numeric constants are used when sending berrors through gRPC.
|
||||
const (
|
||||
// InternalServer is deprecated. Instead, pass a plain Go error. That will get
|
||||
// turned into a probs.InternalServerError by the WFE.
|
||||
InternalServer ErrorType = iota
|
||||
_
|
||||
Malformed
|
||||
|
|
@ -43,6 +57,10 @@ type BoulderError struct {
|
|||
Type ErrorType
|
||||
Detail string
|
||||
SubErrors []SubBoulderError
|
||||
|
||||
// RetryAfter the duration a client should wait before retrying the request
|
||||
// which resulted in this error.
|
||||
RetryAfter time.Duration
|
||||
}
|
||||
|
||||
// SubBoulderError represents sub-errors specific to an identifier that are
|
||||
|
|
@ -64,9 +82,10 @@ func (be *BoulderError) Unwrap() error {
|
|||
// provided subErrs to the existing BoulderError.
|
||||
func (be *BoulderError) WithSubErrors(subErrs []SubBoulderError) *BoulderError {
|
||||
return &BoulderError{
|
||||
Type: be.Type,
|
||||
Detail: be.Detail,
|
||||
SubErrors: append(be.SubErrors, subErrs...),
|
||||
Type: be.Type,
|
||||
Detail: be.Detail,
|
||||
SubErrors: append(be.SubErrors, subErrs...),
|
||||
RetryAfter: be.RetryAfter,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -94,10 +113,35 @@ func NotFoundError(msg string, args ...interface{}) error {
|
|||
return New(NotFound, msg, args...)
|
||||
}
|
||||
|
||||
func RateLimitError(msg string, args ...interface{}) error {
|
||||
func RateLimitError(retryAfter time.Duration, msg string, args ...interface{}) error {
|
||||
return &BoulderError{
|
||||
Type: RateLimit,
|
||||
Detail: fmt.Sprintf(msg+": see https://letsencrypt.org/docs/rate-limits/", args...),
|
||||
Type: RateLimit,
|
||||
Detail: fmt.Sprintf(msg+": see https://letsencrypt.org/docs/rate-limits/", args...),
|
||||
RetryAfter: retryAfter,
|
||||
}
|
||||
}
|
||||
|
||||
func DuplicateCertificateError(retryAfter time.Duration, msg string, args ...interface{}) error {
|
||||
return &BoulderError{
|
||||
Type: RateLimit,
|
||||
Detail: fmt.Sprintf(msg+": see https://letsencrypt.org/docs/duplicate-certificate-limit/", args...),
|
||||
RetryAfter: retryAfter,
|
||||
}
|
||||
}
|
||||
|
||||
func FailedValidationError(retryAfter time.Duration, msg string, args ...interface{}) error {
|
||||
return &BoulderError{
|
||||
Type: RateLimit,
|
||||
Detail: fmt.Sprintf(msg+": see https://letsencrypt.org/docs/failed-validation-limit/", args...),
|
||||
RetryAfter: retryAfter,
|
||||
}
|
||||
}
|
||||
|
||||
func RegistrationsPerIPError(retryAfter time.Duration, msg string, args ...interface{}) error {
|
||||
return &BoulderError{
|
||||
Type: RateLimit,
|
||||
Detail: fmt.Sprintf(msg+": see https://letsencrypt.org/docs/too-many-registrations-for-this-ip/", args...),
|
||||
RetryAfter: retryAfter,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
45
vendor/github.com/letsencrypt/boulder/features/featureflag_string.go
generated
vendored
45
vendor/github.com/letsencrypt/boulder/features/featureflag_string.go
generated
vendored
|
|
@ -1,45 +0,0 @@
|
|||
// Code generated by "stringer -type=FeatureFlag"; DO NOT EDIT.
|
||||
|
||||
package features
|
||||
|
||||
import "strconv"
|
||||
|
||||
func _() {
|
||||
// An "invalid array index" compiler error signifies that the constant values have changed.
|
||||
// Re-run the stringer command to generate them again.
|
||||
var x [1]struct{}
|
||||
_ = x[unused-0]
|
||||
_ = x[PrecertificateRevocation-1]
|
||||
_ = x[StripDefaultSchemePort-2]
|
||||
_ = x[NonCFSSLSigner-3]
|
||||
_ = x[StoreIssuerInfo-4]
|
||||
_ = x[StreamlineOrderAndAuthzs-5]
|
||||
_ = x[V1DisableNewValidations-6]
|
||||
_ = x[CAAValidationMethods-7]
|
||||
_ = x[CAAAccountURI-8]
|
||||
_ = x[EnforceMultiVA-9]
|
||||
_ = x[MultiVAFullResults-10]
|
||||
_ = x[MandatoryPOSTAsGET-11]
|
||||
_ = x[AllowV1Registration-12]
|
||||
_ = x[StoreRevokerInfo-13]
|
||||
_ = x[RestrictRSAKeySizes-14]
|
||||
_ = x[FasterNewOrdersRateLimit-15]
|
||||
_ = x[ECDSAForAll-16]
|
||||
_ = x[ServeRenewalInfo-17]
|
||||
_ = x[GetAuthzReadOnly-18]
|
||||
_ = x[GetAuthzUseIndex-19]
|
||||
_ = x[CheckFailedAuthorizationsFirst-20]
|
||||
_ = x[AllowReRevocation-21]
|
||||
_ = x[MozRevocationReasons-22]
|
||||
}
|
||||
|
||||
const _FeatureFlag_name = "unusedPrecertificateRevocationStripDefaultSchemePortNonCFSSLSignerStoreIssuerInfoStreamlineOrderAndAuthzsV1DisableNewValidationsCAAValidationMethodsCAAAccountURIEnforceMultiVAMultiVAFullResultsMandatoryPOSTAsGETAllowV1RegistrationStoreRevokerInfoRestrictRSAKeySizesFasterNewOrdersRateLimitECDSAForAllServeRenewalInfoGetAuthzReadOnlyGetAuthzUseIndexCheckFailedAuthorizationsFirstAllowReRevocationMozRevocationReasons"
|
||||
|
||||
var _FeatureFlag_index = [...]uint16{0, 6, 30, 52, 66, 81, 105, 128, 148, 161, 175, 193, 211, 230, 246, 265, 289, 300, 316, 332, 348, 378, 395, 415}
|
||||
|
||||
func (i FeatureFlag) String() string {
|
||||
if i < 0 || i >= FeatureFlag(len(_FeatureFlag_index)-1) {
|
||||
return "FeatureFlag(" + strconv.FormatInt(int64(i), 10) + ")"
|
||||
}
|
||||
return _FeatureFlag_name[_FeatureFlag_index[i]:_FeatureFlag_index[i+1]]
|
||||
}
|
||||
158
vendor/github.com/letsencrypt/boulder/features/features.go
generated
vendored
158
vendor/github.com/letsencrypt/boulder/features/features.go
generated
vendored
|
|
@ -1,158 +0,0 @@
|
|||
//go:generate stringer -type=FeatureFlag
|
||||
|
||||
package features
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sync"
|
||||
)
|
||||
|
||||
type FeatureFlag int
|
||||
|
||||
const (
|
||||
unused FeatureFlag = iota // unused is used for testing
|
||||
// Deprecated features, these can be removed once stripped from production configs
|
||||
PrecertificateRevocation
|
||||
StripDefaultSchemePort
|
||||
NonCFSSLSigner
|
||||
StoreIssuerInfo
|
||||
StreamlineOrderAndAuthzs
|
||||
V1DisableNewValidations
|
||||
|
||||
// Currently in-use features
|
||||
// Check CAA and respect validationmethods parameter.
|
||||
CAAValidationMethods
|
||||
// Check CAA and respect accounturi parameter.
|
||||
CAAAccountURI
|
||||
// EnforceMultiVA causes the VA to block on remote VA PerformValidation
|
||||
// requests in order to make a valid/invalid decision with the results.
|
||||
EnforceMultiVA
|
||||
// MultiVAFullResults will cause the main VA to wait for all of the remote VA
|
||||
// results, not just the threshold required to make a decision.
|
||||
MultiVAFullResults
|
||||
// MandatoryPOSTAsGET forbids legacy unauthenticated GET requests for ACME
|
||||
// resources.
|
||||
MandatoryPOSTAsGET
|
||||
// Allow creation of new registrations in ACMEv1.
|
||||
AllowV1Registration
|
||||
// StoreRevokerInfo enables storage of the revoker and a bool indicating if the row
|
||||
// was checked for extant unrevoked certificates in the blockedKeys table.
|
||||
StoreRevokerInfo
|
||||
// RestrictRSAKeySizes enables restriction of acceptable RSA public key moduli to
|
||||
// the common sizes (2048, 3072, and 4096 bits).
|
||||
RestrictRSAKeySizes
|
||||
// FasterNewOrdersRateLimit enables use of a separate table for counting the
|
||||
// new orders rate limit.
|
||||
FasterNewOrdersRateLimit
|
||||
// ECDSAForAll enables all accounts, regardless of their presence in the CA's
|
||||
// ecdsaAllowedAccounts config value, to get issuance from ECDSA issuers.
|
||||
ECDSAForAll
|
||||
// ServeRenewalInfo exposes the renewalInfo endpoint in the directory and for
|
||||
// GET requests. WARNING: This feature is a draft and highly unstable.
|
||||
ServeRenewalInfo
|
||||
// GetAuthzReadOnly causes the SA to use its read-only database connection
|
||||
// (which is generally pointed at a replica rather than the primary db) when
|
||||
// querying the authz2 table.
|
||||
GetAuthzReadOnly
|
||||
// GetAuthzUseIndex causes the SA to use to add a USE INDEX hint when it
|
||||
// queries the authz2 table.
|
||||
GetAuthzUseIndex
|
||||
// Check the failed authorization limit before doing authz reuse.
|
||||
CheckFailedAuthorizationsFirst
|
||||
// AllowReRevocation causes the RA to allow the revocation reason of an
|
||||
// already-revoked certificate to be updated to `keyCompromise` from any
|
||||
// other reason if that compromise is demonstrated by making the second
|
||||
// revocation request signed by the certificate keypair.
|
||||
AllowReRevocation
|
||||
// MozRevocationReasons causes the RA to enforce the following upcoming
|
||||
// Mozilla policies regarding revocation:
|
||||
// - A subscriber can request that their certificate be revoked with reason
|
||||
// keyCompromise, even without demonstrating that compromise at the time.
|
||||
// However, the cert's pubkey will not be added to the blocked keys list.
|
||||
// - When an applicant other than the original subscriber requests that a
|
||||
// certificate be revoked (by demonstrating control over all names in it),
|
||||
// the cert will be revoked with reason cessationOfOperation, regardless of
|
||||
// what revocation reason they request.
|
||||
// - When anyone requests that a certificate be revoked by signing the request
|
||||
// with the certificate's keypair, the cert will be revoked with reason
|
||||
// keyCompromise, regardless of what revocation reason they request.
|
||||
MozRevocationReasons
|
||||
)
|
||||
|
||||
// List of features and their default value, protected by fMu
|
||||
var features = map[FeatureFlag]bool{
|
||||
unused: false,
|
||||
CAAValidationMethods: false,
|
||||
CAAAccountURI: false,
|
||||
EnforceMultiVA: false,
|
||||
MultiVAFullResults: false,
|
||||
MandatoryPOSTAsGET: false,
|
||||
AllowV1Registration: true,
|
||||
V1DisableNewValidations: false,
|
||||
PrecertificateRevocation: false,
|
||||
StripDefaultSchemePort: false,
|
||||
StoreIssuerInfo: false,
|
||||
StoreRevokerInfo: false,
|
||||
RestrictRSAKeySizes: false,
|
||||
FasterNewOrdersRateLimit: false,
|
||||
NonCFSSLSigner: false,
|
||||
ECDSAForAll: false,
|
||||
StreamlineOrderAndAuthzs: false,
|
||||
ServeRenewalInfo: false,
|
||||
GetAuthzReadOnly: false,
|
||||
GetAuthzUseIndex: false,
|
||||
CheckFailedAuthorizationsFirst: false,
|
||||
AllowReRevocation: false,
|
||||
MozRevocationReasons: false,
|
||||
}
|
||||
|
||||
var fMu = new(sync.RWMutex)
|
||||
|
||||
var initial = map[FeatureFlag]bool{}
|
||||
|
||||
var nameToFeature = make(map[string]FeatureFlag, len(features))
|
||||
|
||||
func init() {
|
||||
for f, v := range features {
|
||||
nameToFeature[f.String()] = f
|
||||
initial[f] = v
|
||||
}
|
||||
}
|
||||
|
||||
// Set accepts a list of features and whether they should
|
||||
// be enabled or disabled, it will return a error if passed
|
||||
// a feature name that it doesn't know
|
||||
func Set(featureSet map[string]bool) error {
|
||||
fMu.Lock()
|
||||
defer fMu.Unlock()
|
||||
for n, v := range featureSet {
|
||||
f, present := nameToFeature[n]
|
||||
if !present {
|
||||
return fmt.Errorf("feature '%s' doesn't exist", n)
|
||||
}
|
||||
features[f] = v
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Enabled returns true if the feature is enabled or false
|
||||
// if it isn't, it will panic if passed a feature that it
|
||||
// doesn't know.
|
||||
func Enabled(n FeatureFlag) bool {
|
||||
fMu.RLock()
|
||||
defer fMu.RUnlock()
|
||||
v, present := features[n]
|
||||
if !present {
|
||||
panic(fmt.Sprintf("feature '%s' doesn't exist", n.String()))
|
||||
}
|
||||
return v
|
||||
}
|
||||
|
||||
// Reset resets the features to their initial state
|
||||
func Reset() {
|
||||
fMu.Lock()
|
||||
defer fMu.Unlock()
|
||||
for k, v := range initial {
|
||||
features[k] = v
|
||||
}
|
||||
}
|
||||
16
vendor/github.com/letsencrypt/boulder/goodkey/blocked.go
generated
vendored
16
vendor/github.com/letsencrypt/boulder/goodkey/blocked.go
generated
vendored
|
|
@ -6,11 +6,11 @@ import (
|
|||
"encoding/base64"
|
||||
"encoding/hex"
|
||||
"errors"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
|
||||
"github.com/letsencrypt/boulder/core"
|
||||
|
||||
yaml "gopkg.in/yaml.v2"
|
||||
yaml "gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
// blockedKeys is a type for maintaining a map of SHA256 hashes
|
||||
|
|
@ -42,16 +42,14 @@ func (b blockedKeys) blocked(key crypto.PublicKey) (bool, error) {
|
|||
// SHA256 hashes of SubjectPublicKeyInfo's in the input YAML file
|
||||
// with the expected format:
|
||||
//
|
||||
// ```
|
||||
// blocked:
|
||||
// - cuwGhNNI6nfob5aqY90e7BleU6l7rfxku4X3UTJ3Z7M=
|
||||
// <snipped>
|
||||
// - Qebc1V3SkX3izkYRGNJilm9Bcuvf0oox4U2Rn+b4JOE=
|
||||
// ```
|
||||
// blocked:
|
||||
// - cuwGhNNI6nfob5aqY90e7BleU6l7rfxku4X3UTJ3Z7M=
|
||||
// <snipped>
|
||||
// - Qebc1V3SkX3izkYRGNJilm9Bcuvf0oox4U2Rn+b4JOE=
|
||||
//
|
||||
// If no hashes are found in the input YAML an error is returned.
|
||||
func loadBlockedKeysList(filename string) (*blockedKeys, error) {
|
||||
yamlBytes, err := ioutil.ReadFile(filename)
|
||||
yamlBytes, err := os.ReadFile(filename)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
|||
50
vendor/github.com/letsencrypt/boulder/goodkey/good_key.go
generated
vendored
50
vendor/github.com/letsencrypt/boulder/goodkey/good_key.go
generated
vendored
|
|
@ -13,9 +13,6 @@ import (
|
|||
|
||||
"github.com/letsencrypt/boulder/core"
|
||||
berrors "github.com/letsencrypt/boulder/errors"
|
||||
"github.com/letsencrypt/boulder/features"
|
||||
sapb "github.com/letsencrypt/boulder/sa/proto"
|
||||
"google.golang.org/grpc"
|
||||
|
||||
"github.com/titanous/rocacheck"
|
||||
)
|
||||
|
|
@ -68,10 +65,12 @@ func badKey(msg string, args ...interface{}) error {
|
|||
return fmt.Errorf("%w%s", ErrBadKey, fmt.Errorf(msg, args...))
|
||||
}
|
||||
|
||||
// BlockedKeyCheckFunc is used to pass in the sa.BlockedKey method to KeyPolicy,
|
||||
// rather than storing a full sa.SQLStorageAuthority. This makes testing
|
||||
// BlockedKeyCheckFunc is used to pass in the sa.BlockedKey functionality to KeyPolicy,
|
||||
// rather than storing a full sa.SQLStorageAuthority. This allows external
|
||||
// users who don’t want to import all of boulder/sa, and makes testing
|
||||
// significantly simpler.
|
||||
type BlockedKeyCheckFunc func(context.Context, *sapb.KeyBlockedRequest, ...grpc.CallOption) (*sapb.Exists, error)
|
||||
// On success, the function returns a boolean which is true if the key is blocked.
|
||||
type BlockedKeyCheckFunc func(ctx context.Context, keyHash []byte) (bool, error)
|
||||
|
||||
// KeyPolicy determines which types of key may be used with various boulder
|
||||
// operations.
|
||||
|
|
@ -82,7 +81,7 @@ type KeyPolicy struct {
|
|||
weakRSAList *WeakRSAKeys
|
||||
blockedList *blockedKeys
|
||||
fermatRounds int
|
||||
dbCheck BlockedKeyCheckFunc
|
||||
blockedCheck BlockedKeyCheckFunc
|
||||
}
|
||||
|
||||
// NewKeyPolicy returns a KeyPolicy that allows RSA, ECDSA256 and ECDSA384.
|
||||
|
|
@ -97,7 +96,7 @@ func NewKeyPolicy(config *Config, bkc BlockedKeyCheckFunc) (KeyPolicy, error) {
|
|||
AllowRSA: true,
|
||||
AllowECDSANISTP256: true,
|
||||
AllowECDSANISTP384: true,
|
||||
dbCheck: bkc,
|
||||
blockedCheck: bkc,
|
||||
}
|
||||
if config.WeakKeyFile != "" {
|
||||
keyList, err := LoadWeakRSASuffixes(config.WeakKeyFile)
|
||||
|
|
@ -142,15 +141,15 @@ func (policy *KeyPolicy) GoodKey(ctx context.Context, key crypto.PublicKey) erro
|
|||
return badKey("public key is forbidden")
|
||||
}
|
||||
}
|
||||
if policy.dbCheck != nil {
|
||||
if policy.blockedCheck != nil {
|
||||
digest, err := core.KeyDigest(key)
|
||||
if err != nil {
|
||||
return badKey("%w", err)
|
||||
}
|
||||
exists, err := policy.dbCheck(ctx, &sapb.KeyBlockedRequest{KeyHash: digest[:]})
|
||||
exists, err := policy.blockedCheck(ctx, digest[:])
|
||||
if err != nil {
|
||||
return err
|
||||
} else if exists.Exists {
|
||||
} else if exists {
|
||||
return badKey("public key is forbidden")
|
||||
}
|
||||
}
|
||||
|
|
@ -275,6 +274,12 @@ func (policy *KeyPolicy) goodCurve(c elliptic.Curve) (err error) {
|
|||
}
|
||||
}
|
||||
|
||||
// Baseline Requirements, Section 6.1.5 requires key size >= 2048 and a multiple
|
||||
// of 8 bits: https://github.com/cabforum/servercert/blob/main/docs/BR.md#615-key-sizes
|
||||
// Baseline Requirements, Section 6.1.1.3 requires that we reject any keys which
|
||||
// have a known method to easily compute their private key, such as Debian Weak
|
||||
// Keys. Our enforcement mechanism relies on enumerating all Debian Weak Keys at
|
||||
// common key sizes, so we restrict all issuance to those common key sizes.
|
||||
var acceptableRSAKeySizes = map[int]bool{
|
||||
2048: true,
|
||||
3072: true,
|
||||
|
|
@ -290,27 +295,12 @@ func (policy *KeyPolicy) goodKeyRSA(key *rsa.PublicKey) (err error) {
|
|||
return badKey("key is on a known weak RSA key list")
|
||||
}
|
||||
|
||||
// Baseline Requirements Appendix A
|
||||
// Modulus must be >= 2048 bits and <= 4096 bits
|
||||
modulus := key.N
|
||||
|
||||
// See comment on acceptableRSAKeySizes above.
|
||||
modulusBitLen := modulus.BitLen()
|
||||
if features.Enabled(features.RestrictRSAKeySizes) {
|
||||
if !acceptableRSAKeySizes[modulusBitLen] {
|
||||
return badKey("key size not supported: %d", modulusBitLen)
|
||||
}
|
||||
} else {
|
||||
const maxKeySize = 4096
|
||||
if modulusBitLen < 2048 {
|
||||
return badKey("key too small: %d", modulusBitLen)
|
||||
}
|
||||
if modulusBitLen > maxKeySize {
|
||||
return badKey("key too large: %d > %d", modulusBitLen, maxKeySize)
|
||||
}
|
||||
// Bit lengths that are not a multiple of 8 may cause problems on some
|
||||
// client implementations.
|
||||
if modulusBitLen%8 != 0 {
|
||||
return badKey("key length wasn't a multiple of 8: %d", modulusBitLen)
|
||||
}
|
||||
if !acceptableRSAKeySizes[modulusBitLen] {
|
||||
return badKey("key size not supported: %d", modulusBitLen)
|
||||
}
|
||||
|
||||
// Rather than support arbitrary exponents, which significantly increases
|
||||
|
|
|
|||
4
vendor/github.com/letsencrypt/boulder/goodkey/weak.go
generated
vendored
4
vendor/github.com/letsencrypt/boulder/goodkey/weak.go
generated
vendored
|
|
@ -11,7 +11,7 @@ import (
|
|||
"encoding/hex"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
)
|
||||
|
||||
type truncatedHash [10]byte
|
||||
|
|
@ -21,7 +21,7 @@ type WeakRSAKeys struct {
|
|||
}
|
||||
|
||||
func LoadWeakRSASuffixes(path string) (*WeakRSAKeys, error) {
|
||||
f, err := ioutil.ReadFile(path)
|
||||
f, err := os.ReadFile(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
|||
2
vendor/github.com/letsencrypt/boulder/revocation/reasons.go
generated
vendored
2
vendor/github.com/letsencrypt/boulder/revocation/reasons.go
generated
vendored
|
|
@ -31,7 +31,6 @@ var ReasonToString = map[Reason]string{
|
|||
var UserAllowedReasons = map[Reason]struct{}{
|
||||
ocsp.Unspecified: {},
|
||||
ocsp.KeyCompromise: {},
|
||||
ocsp.AffiliationChanged: {},
|
||||
ocsp.Superseded: {},
|
||||
ocsp.CessationOfOperation: {},
|
||||
}
|
||||
|
|
@ -42,7 +41,6 @@ var UserAllowedReasons = map[Reason]struct{}{
|
|||
var AdminAllowedReasons = map[Reason]struct{}{
|
||||
ocsp.Unspecified: {},
|
||||
ocsp.KeyCompromise: {},
|
||||
ocsp.AffiliationChanged: {},
|
||||
ocsp.Superseded: {},
|
||||
ocsp.CessationOfOperation: {},
|
||||
ocsp.PrivilegeWithdrawn: {},
|
||||
|
|
|
|||
3449
vendor/github.com/letsencrypt/boulder/sa/proto/sa.pb.go
generated
vendored
3449
vendor/github.com/letsencrypt/boulder/sa/proto/sa.pb.go
generated
vendored
File diff suppressed because it is too large
Load diff
272
vendor/github.com/letsencrypt/boulder/sa/proto/sa.proto
generated
vendored
272
vendor/github.com/letsencrypt/boulder/sa/proto/sa.proto
generated
vendored
|
|
@ -1,272 +0,0 @@
|
|||
syntax = "proto3";
|
||||
|
||||
package sa;
|
||||
option go_package = "github.com/letsencrypt/boulder/sa/proto";
|
||||
|
||||
import "core/proto/core.proto";
|
||||
import "google/protobuf/empty.proto";
|
||||
|
||||
service StorageAuthority {
|
||||
// Getters
|
||||
rpc GetRegistration(RegistrationID) returns (core.Registration) {}
|
||||
rpc GetRegistrationByKey(JSONWebKey) returns (core.Registration) {}
|
||||
rpc GetSerialMetadata(Serial) returns (SerialMetadata) {}
|
||||
rpc GetCertificate(Serial) returns (core.Certificate) {}
|
||||
rpc GetPrecertificate(Serial) returns (core.Certificate) {}
|
||||
rpc GetCertificateStatus(Serial) returns (core.CertificateStatus) {}
|
||||
rpc CountCertificatesByNames(CountCertificatesByNamesRequest) returns (CountByNames) {}
|
||||
rpc CountRegistrationsByIP(CountRegistrationsByIPRequest) returns (Count) {}
|
||||
rpc CountRegistrationsByIPRange(CountRegistrationsByIPRequest) returns (Count) {}
|
||||
rpc CountOrders(CountOrdersRequest) returns (Count) {}
|
||||
// Return a count of authorizations with status "invalid" that belong to
|
||||
// a given registration ID and expire in the given time range.
|
||||
rpc CountFQDNSets(CountFQDNSetsRequest) returns (Count) {}
|
||||
rpc FQDNSetExists(FQDNSetExistsRequest) returns (Exists) {}
|
||||
rpc PreviousCertificateExists(PreviousCertificateExistsRequest) returns (Exists) {}
|
||||
rpc GetAuthorization2(AuthorizationID2) returns (core.Authorization) {}
|
||||
rpc GetAuthorizations2(GetAuthorizationsRequest) returns (Authorizations) {}
|
||||
rpc GetPendingAuthorization2(GetPendingAuthorizationRequest) returns (core.Authorization) {}
|
||||
rpc CountPendingAuthorizations2(RegistrationID) returns (Count) {}
|
||||
rpc GetValidOrderAuthorizations2(GetValidOrderAuthorizationsRequest) returns (Authorizations) {}
|
||||
rpc CountInvalidAuthorizations2(CountInvalidAuthorizationsRequest) returns (Count) {}
|
||||
rpc GetValidAuthorizations2(GetValidAuthorizationsRequest) returns (Authorizations) {}
|
||||
rpc KeyBlocked(KeyBlockedRequest) returns (Exists) {}
|
||||
// Adders
|
||||
rpc NewRegistration(core.Registration) returns (core.Registration) {}
|
||||
rpc UpdateRegistration(core.Registration) returns (google.protobuf.Empty) {}
|
||||
rpc AddCertificate(AddCertificateRequest) returns (AddCertificateResponse) {}
|
||||
rpc AddPrecertificate(AddCertificateRequest) returns (google.protobuf.Empty) {}
|
||||
rpc AddSerial(AddSerialRequest) returns (google.protobuf.Empty) {}
|
||||
rpc DeactivateRegistration(RegistrationID) returns (google.protobuf.Empty) {}
|
||||
rpc NewOrder(NewOrderRequest) returns (core.Order) {}
|
||||
rpc NewOrderAndAuthzs(NewOrderAndAuthzsRequest) returns (core.Order) {}
|
||||
rpc SetOrderProcessing(OrderRequest) returns (google.protobuf.Empty) {}
|
||||
rpc SetOrderError(SetOrderErrorRequest) returns (google.protobuf.Empty) {}
|
||||
rpc FinalizeOrder(FinalizeOrderRequest) returns (google.protobuf.Empty) {}
|
||||
rpc GetOrder(OrderRequest) returns (core.Order) {}
|
||||
rpc GetOrderForNames(GetOrderForNamesRequest) returns (core.Order) {}
|
||||
rpc RevokeCertificate(RevokeCertificateRequest) returns (google.protobuf.Empty) {}
|
||||
rpc UpdateRevokedCertificate(RevokeCertificateRequest) returns (google.protobuf.Empty) {}
|
||||
rpc NewAuthorizations2(AddPendingAuthorizationsRequest) returns (Authorization2IDs) {}
|
||||
rpc FinalizeAuthorization2(FinalizeAuthorizationRequest) returns (google.protobuf.Empty) {}
|
||||
rpc DeactivateAuthorization2(AuthorizationID2) returns (google.protobuf.Empty) {}
|
||||
rpc AddBlockedKey(AddBlockedKeyRequest) returns (google.protobuf.Empty) {}
|
||||
}
|
||||
|
||||
message RegistrationID {
|
||||
int64 id = 1;
|
||||
}
|
||||
|
||||
message JSONWebKey {
|
||||
bytes jwk = 1;
|
||||
}
|
||||
|
||||
message AuthorizationID {
|
||||
string id = 1;
|
||||
}
|
||||
|
||||
message GetPendingAuthorizationRequest {
|
||||
int64 registrationID = 1;
|
||||
string identifierType = 2;
|
||||
string identifierValue = 3;
|
||||
// Result must be valid until at least this Unix timestamp (nanos)
|
||||
int64 validUntil = 4;
|
||||
}
|
||||
|
||||
message GetValidAuthorizationsRequest {
|
||||
int64 registrationID = 1;
|
||||
repeated string domains = 2;
|
||||
int64 now = 3; // Unix timestamp (nanoseconds)
|
||||
}
|
||||
|
||||
message ValidAuthorizations {
|
||||
message MapElement {
|
||||
string domain = 1;
|
||||
core.Authorization authz = 2;
|
||||
}
|
||||
repeated MapElement valid = 1;
|
||||
}
|
||||
|
||||
message Serial {
|
||||
string serial = 1;
|
||||
}
|
||||
|
||||
message SerialMetadata {
|
||||
string serial = 1;
|
||||
int64 registrationID = 2;
|
||||
int64 created = 3; // Unix timestamp (nanoseconds)
|
||||
int64 expires = 4; // Unix timestamp (nanoseconds)
|
||||
}
|
||||
|
||||
message Range {
|
||||
int64 earliest = 1; // Unix timestamp (nanoseconds)
|
||||
int64 latest = 2; // Unix timestamp (nanoseconds)
|
||||
}
|
||||
|
||||
message Count {
|
||||
int64 count = 1;
|
||||
}
|
||||
|
||||
message CountCertificatesByNamesRequest {
|
||||
Range range = 1;
|
||||
repeated string names = 2;
|
||||
}
|
||||
|
||||
message CountByNames {
|
||||
map<string, int64> counts = 1;
|
||||
}
|
||||
|
||||
message CountRegistrationsByIPRequest {
|
||||
bytes ip = 1;
|
||||
Range range = 2;
|
||||
}
|
||||
|
||||
message CountInvalidAuthorizationsRequest {
|
||||
int64 registrationID = 1;
|
||||
string hostname = 2;
|
||||
// Count authorizations that expire in this range.
|
||||
Range range = 3;
|
||||
}
|
||||
|
||||
message CountOrdersRequest {
|
||||
int64 accountID = 1;
|
||||
Range range = 2;
|
||||
}
|
||||
|
||||
message CountFQDNSetsRequest {
|
||||
int64 window = 1;
|
||||
repeated string domains = 2;
|
||||
}
|
||||
|
||||
message FQDNSetExistsRequest {
|
||||
repeated string domains = 1;
|
||||
}
|
||||
|
||||
message PreviousCertificateExistsRequest {
|
||||
string domain = 1;
|
||||
int64 regID = 2;
|
||||
}
|
||||
|
||||
message Exists {
|
||||
bool exists = 1;
|
||||
}
|
||||
|
||||
message AddSerialRequest {
|
||||
int64 regID = 1;
|
||||
string serial = 2;
|
||||
int64 created = 3; // Unix timestamp (nanoseconds)
|
||||
int64 expires = 4; // Unix timestamp (nanoseconds)
|
||||
}
|
||||
|
||||
message AddCertificateRequest {
|
||||
bytes der = 1;
|
||||
int64 regID = 2;
|
||||
// A signed OCSP response for the certificate contained in "der".
|
||||
// Note: The certificate status in the OCSP response is assumed to be 0 (good).
|
||||
bytes ocsp = 3;
|
||||
// An issued time. When not present the SA defaults to using
|
||||
// the current time. The orphan-finder uses this parameter to add
|
||||
// certificates with the correct historic issued date
|
||||
int64 issued = 4;
|
||||
int64 issuerID = 5;
|
||||
}
|
||||
|
||||
message AddCertificateResponse {
|
||||
string digest = 1;
|
||||
}
|
||||
|
||||
message OrderRequest {
|
||||
int64 id = 1;
|
||||
}
|
||||
|
||||
message NewOrderRequest {
|
||||
int64 registrationID = 1;
|
||||
int64 expires = 2;
|
||||
repeated string names = 3;
|
||||
repeated int64 v2Authorizations = 4;
|
||||
}
|
||||
|
||||
message NewOrderAndAuthzsRequest {
|
||||
NewOrderRequest newOrder = 1;
|
||||
repeated core.Authorization newAuthzs = 2;
|
||||
}
|
||||
|
||||
message SetOrderErrorRequest {
|
||||
int64 id = 1;
|
||||
core.ProblemDetails error = 2;
|
||||
}
|
||||
|
||||
message GetValidOrderAuthorizationsRequest {
|
||||
int64 id = 1;
|
||||
int64 acctID = 2;
|
||||
}
|
||||
|
||||
message GetOrderForNamesRequest {
|
||||
int64 acctID = 1;
|
||||
repeated string names = 2;
|
||||
}
|
||||
|
||||
message FinalizeOrderRequest {
|
||||
int64 id = 1;
|
||||
string certificateSerial = 2;
|
||||
}
|
||||
|
||||
message GetAuthorizationsRequest {
|
||||
int64 registrationID = 1;
|
||||
repeated string domains = 2;
|
||||
int64 now = 3; // Unix timestamp (nanoseconds)
|
||||
}
|
||||
|
||||
message Authorizations {
|
||||
message MapElement {
|
||||
string domain = 1;
|
||||
core.Authorization authz = 2;
|
||||
}
|
||||
repeated MapElement authz = 1;
|
||||
}
|
||||
|
||||
message AddPendingAuthorizationsRequest {
|
||||
repeated core.Authorization authz = 1;
|
||||
}
|
||||
|
||||
message AuthorizationIDs {
|
||||
repeated string ids = 1;
|
||||
}
|
||||
|
||||
message AuthorizationID2 {
|
||||
int64 id = 1;
|
||||
}
|
||||
|
||||
message Authorization2IDs {
|
||||
repeated int64 ids = 1;
|
||||
}
|
||||
|
||||
message RevokeCertificateRequest {
|
||||
string serial = 1;
|
||||
int64 reason = 2;
|
||||
int64 date = 3; // Unix timestamp (nanoseconds)
|
||||
int64 backdate = 5; // Unix timestamp (nanoseconds)
|
||||
bytes response = 4;
|
||||
}
|
||||
|
||||
message FinalizeAuthorizationRequest {
|
||||
int64 id = 1;
|
||||
string status = 2;
|
||||
int64 expires = 3; // Unix timestamp (nanoseconds)
|
||||
string attempted = 4;
|
||||
repeated core.ValidationRecord validationRecords = 5;
|
||||
core.ProblemDetails validationError = 6;
|
||||
int64 attemptedAt = 7; // Unix timestamp (nanoseconds)
|
||||
}
|
||||
|
||||
message AddBlockedKeyRequest {
|
||||
bytes keyHash = 1;
|
||||
int64 added = 2; // Unix timestamp (nanoseconds)
|
||||
string source = 3;
|
||||
string comment = 4;
|
||||
int64 revokedBy = 5;
|
||||
}
|
||||
|
||||
message KeyBlockedRequest {
|
||||
bytes keyHash = 1;
|
||||
}
|
||||
1515
vendor/github.com/letsencrypt/boulder/sa/proto/sa_grpc.pb.go
generated
vendored
1515
vendor/github.com/letsencrypt/boulder/sa/proto/sa_grpc.pb.go
generated
vendored
File diff suppressed because it is too large
Load diff
46
vendor/github.com/letsencrypt/boulder/sa/proto/subsets.go
generated
vendored
46
vendor/github.com/letsencrypt/boulder/sa/proto/subsets.go
generated
vendored
|
|
@ -1,46 +0,0 @@
|
|||
// Copied from the auto-generated sa_grpc.pb.go
|
||||
|
||||
package proto
|
||||
|
||||
import (
|
||||
context "context"
|
||||
|
||||
proto "github.com/letsencrypt/boulder/core/proto"
|
||||
grpc "google.golang.org/grpc"
|
||||
emptypb "google.golang.org/protobuf/types/known/emptypb"
|
||||
)
|
||||
|
||||
// StorageAuthorityGetterClient is a read-only subset of the sapb.StorageAuthorityClient interface
|
||||
type StorageAuthorityGetterClient interface {
|
||||
GetRegistration(ctx context.Context, in *RegistrationID, opts ...grpc.CallOption) (*proto.Registration, error)
|
||||
GetRegistrationByKey(ctx context.Context, in *JSONWebKey, opts ...grpc.CallOption) (*proto.Registration, error)
|
||||
GetCertificate(ctx context.Context, in *Serial, opts ...grpc.CallOption) (*proto.Certificate, error)
|
||||
GetPrecertificate(ctx context.Context, in *Serial, opts ...grpc.CallOption) (*proto.Certificate, error)
|
||||
GetCertificateStatus(ctx context.Context, in *Serial, opts ...grpc.CallOption) (*proto.CertificateStatus, error)
|
||||
CountCertificatesByNames(ctx context.Context, in *CountCertificatesByNamesRequest, opts ...grpc.CallOption) (*CountByNames, error)
|
||||
CountRegistrationsByIP(ctx context.Context, in *CountRegistrationsByIPRequest, opts ...grpc.CallOption) (*Count, error)
|
||||
CountRegistrationsByIPRange(ctx context.Context, in *CountRegistrationsByIPRequest, opts ...grpc.CallOption) (*Count, error)
|
||||
CountOrders(ctx context.Context, in *CountOrdersRequest, opts ...grpc.CallOption) (*Count, error)
|
||||
CountFQDNSets(ctx context.Context, in *CountFQDNSetsRequest, opts ...grpc.CallOption) (*Count, error)
|
||||
FQDNSetExists(ctx context.Context, in *FQDNSetExistsRequest, opts ...grpc.CallOption) (*Exists, error)
|
||||
PreviousCertificateExists(ctx context.Context, in *PreviousCertificateExistsRequest, opts ...grpc.CallOption) (*Exists, error)
|
||||
GetAuthorization2(ctx context.Context, in *AuthorizationID2, opts ...grpc.CallOption) (*proto.Authorization, error)
|
||||
GetAuthorizations2(ctx context.Context, in *GetAuthorizationsRequest, opts ...grpc.CallOption) (*Authorizations, error)
|
||||
GetPendingAuthorization2(ctx context.Context, in *GetPendingAuthorizationRequest, opts ...grpc.CallOption) (*proto.Authorization, error)
|
||||
CountPendingAuthorizations2(ctx context.Context, in *RegistrationID, opts ...grpc.CallOption) (*Count, error)
|
||||
GetValidOrderAuthorizations2(ctx context.Context, in *GetValidOrderAuthorizationsRequest, opts ...grpc.CallOption) (*Authorizations, error)
|
||||
CountInvalidAuthorizations2(ctx context.Context, in *CountInvalidAuthorizationsRequest, opts ...grpc.CallOption) (*Count, error)
|
||||
GetValidAuthorizations2(ctx context.Context, in *GetValidAuthorizationsRequest, opts ...grpc.CallOption) (*Authorizations, error)
|
||||
KeyBlocked(ctx context.Context, in *KeyBlockedRequest, opts ...grpc.CallOption) (*Exists, error)
|
||||
GetOrder(ctx context.Context, in *OrderRequest, opts ...grpc.CallOption) (*proto.Order, error)
|
||||
GetOrderForNames(ctx context.Context, in *GetOrderForNamesRequest, opts ...grpc.CallOption) (*proto.Order, error)
|
||||
}
|
||||
|
||||
// StorageAuthorityCertificateClient is a subset of the sapb.StorageAuthorityClient interface that only reads and writes certificates
|
||||
type StorageAuthorityCertificateClient interface {
|
||||
AddSerial(ctx context.Context, in *AddSerialRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
|
||||
AddPrecertificate(ctx context.Context, in *AddCertificateRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
|
||||
GetPrecertificate(ctx context.Context, in *Serial, opts ...grpc.CallOption) (*proto.Certificate, error)
|
||||
AddCertificate(ctx context.Context, in *AddCertificateRequest, opts ...grpc.CallOption) (*AddCertificateResponse, error)
|
||||
GetCertificate(ctx context.Context, in *Serial, opts ...grpc.CallOption) (*proto.Certificate, error)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue