Documentation ¶
Overview ¶
handler.go
Index ¶
- Variables
- func GetHash(scheme tls.SignatureScheme) (crypto.Hash, error)
- func GetPortFromRequest(r *http.Request, httpScheme string) (uint16, error)
- func IsPubkeySupported(key crypto.PublicKey) bool
- func NewSignatureAuthHandler(keysDB *Keys, handlerFunc http.HandlerFunc) http.HandlerFunc
- func ParseAndValidateSignatureScheme(schemeStr string) (tls.SignatureScheme, error)
- func ParsePublicKey(keyBase64 string, signatureScheme tls.SignatureScheme) (crypto.PublicKey, error)
- func ParseUncompressedPoint(uncompressedPoint []byte, scheme tls.SignatureScheme) (*ecdsa.PublicKey, error)
- func PrepareTLSExporterInput(signatureScheme tls.SignatureScheme, keyID KeyID, pubKey crypto.PublicKey, ...) (out []byte, err error)
- func SerializePublicKey(out []byte, pubkey crypto.PublicKey) ([]byte, error)
- func SerializeUncompressedPoint(out []byte, pubkey *ecdsa.PublicKey) ([]byte, error)
- func VerifySignature(keysDB *Keys, r *http.Request) (bool, error)
- func VerifySignatureWithMaterial(keysDB *Keys, signatureCandidate *Signature, material *TLSExporterMaterial) (bool, error)
- type InvalidPublicKeyFormat
- type InvalidTLSSignatureSchemeFormat
- type KeyID
- type KeyType
- type Keys
- type MalformedHTTPSignatureAuth
- type PubkeyEqual
- type PublicKeysMismatch
- type Signature
- func ExtractSignature(r *http.Request) (*Signature, error)
- func NewSignatureForRequest(tls *tls.ConnectionState, r *http.Request, keyID KeyID, signer crypto.Signer, ...) (*Signature, error)
- func NewSignatureWithMaterial(material *TLSExporterMaterial, keyID KeyID, signer crypto.Signer, ...) (*Signature, error)
- func ParseSignatureAuthorizationContent(content string) (*Signature, error)
- type SignatureNotFound
- type SyncMap
- type TLSExporterMaterial
- type TLSSignatureSchemeNotSupported
- type UnsupportedKeyType
Constants ¶
This section is empty.
Variables ¶
var SIGNATURE_HEADER = append(SIGNATURE_HEADER_PART_1[:], []byte("HTTP Concealed Authentication\x00")...)
var SIGNATURE_HEADER_PART_1 [64]byte = [64]byte{
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
}
Functions ¶
func GetPortFromRequest ¶
func IsPubkeySupported ¶
func NewSignatureAuthHandler ¶
func NewSignatureAuthHandler(keysDB *Keys, handlerFunc http.HandlerFunc) http.HandlerFunc
func ParseAndValidateSignatureScheme ¶
func ParseAndValidateSignatureScheme(schemeStr string) (tls.SignatureScheme, error)
ParseAndValidateSignatureScheme parses the given string into a tls.SignatureScheme and ensures it only corresponds to a supported signature scheme such as the ones defined in https://www.ietf.org/archive/id/draft-ietf-httpbis-unprompted-auth-05.html
func ParsePublicKey ¶
func ParseUncompressedPoint ¶
func ParseUncompressedPoint(uncompressedPoint []byte, scheme tls.SignatureScheme) (*ecdsa.PublicKey, error)
ParseUncompressedPoint parses the given public key in uncompressed point format (cf RFC8446 Section 4.2.8.2) into an ECDSA public key
func PrepareTLSExporterInput ¶
func SerializePublicKey ¶
func SerializeUncompressedPoint ¶
ParseUncompressedPoint parses the given public key in uncompressed point format (cf RFC8446 Section 4.2.8.2) into an ECDSA public key
func VerifySignatureWithMaterial ¶
func VerifySignatureWithMaterial(keysDB *Keys, signatureCandidate *Signature, material *TLSExporterMaterial) (bool, error)
Types ¶
type InvalidPublicKeyFormat ¶
type InvalidPublicKeyFormat struct {
// contains filtered or unexported fields
}
func (InvalidPublicKeyFormat) Error ¶
func (e InvalidPublicKeyFormat) Error() string
type InvalidTLSSignatureSchemeFormat ¶
type InvalidTLSSignatureSchemeFormat struct {
Value string
}
func (InvalidTLSSignatureSchemeFormat) Error ¶
func (e InvalidTLSSignatureSchemeFormat) Error() string
type KeyID ¶
type KeyID string
func ParseKeyID ¶
ParseKeyID parses the given base64-encoded string into a KeyID The id parameter must be a valid base64-encoded string following the base64url encoding scheme *without padding* as defined in RFC 4648, Section 5.
type KeyType ¶
type KeyType int
func GetKeyType ¶
func GetKeyType(scheme tls.SignatureScheme) (KeyType, error)
type Keys ¶
type Keys struct {
// contains filtered or unexported fields
}
currently a simple wrapper around a SyncMap
func NewKeysDatabase ¶
func NewKeysDatabase() *Keys
func (*Keys) AddKey ¶
AddKey adds a public key with the given Key ID to the database of keys. Returns nil if no previous key was present with this ID, otherwise returns the previous key.
type MalformedHTTPSignatureAuth ¶
type MalformedHTTPSignatureAuth struct {
Msg string
}
func (MalformedHTTPSignatureAuth) Error ¶
func (e MalformedHTTPSignatureAuth) Error() string
type PubkeyEqual ¶
type PublicKeysMismatch ¶
type PublicKeysMismatch struct {
// contains filtered or unexported fields
}
func (PublicKeysMismatch) Error ¶
func (e PublicKeysMismatch) Error() string
type Signature ¶
type Signature struct {
// contains filtered or unexported fields
}
func ExtractSignature ¶
ExtractSignature extracts the HTTP signature from the Authorization header It may return a nil signature with a nil error if no signature was found. It returns a non-nil error if the Signature was present in the Authorization header but was malformed.
example from the draft:
Authorization: Signature \ k=YmFzZW1lbnQ, \ a=VGhpcyBpcyBhIHB1YmxpYyBrZXkgaW4gdXNlIGhlcmU, \ s=2055, \ v=dmVyaWZpY2F0aW9uXzE2Qg, \ p=SW5zZXJ0IHNpZ25hdHVyZSBvZiBub25jZSBoZXJlIHdo \ aWNoIHRha2VzIDUxMiBiaXRzIGZvciBFZDI1NTE5IQ
func NewSignatureForRequest ¶
func NewSignatureWithMaterial ¶
func NewSignatureWithMaterial(material *TLSExporterMaterial, keyID KeyID, signer crypto.Signer, signatureScheme tls.SignatureScheme) (*Signature, error)
func ParseSignatureAuthorizationContent ¶
ParseSignatureAuthorizationContent parses the given Authorization header content into a Signature. content must be a value Signature Authorization header content, i.e. it must start with "Concealed " and follow the specification in https://www.ietf.org/archive/id/draft-ietf-httpbis-unprompted-auth-05.html
func (*Signature) SignatureAuthorizationHeader ¶
SignatureAuthorizationHeader serializes the signature into a string that can be used in the Authorization header. The returned value takes the form k, a, v and p are base64url-encoded s is base10-encoded "Signature k=<keyID>,a=<pubkey>,s=<signatureScheme>,v=<exporterVerification>,p=<proof>"
func (*Signature) SignatureScheme ¶
func (s *Signature) SignatureScheme() tls.SignatureScheme
type SignatureNotFound ¶
type SignatureNotFound struct { }
func (SignatureNotFound) Error ¶
func (e SignatureNotFound) Error() string
type SyncMap ¶
type SyncMap[K comparable, V any] struct { // contains filtered or unexported fields }
func NewSyncMap ¶
func NewSyncMap[K comparable, V any]() SyncMap[K, V]
type TLSExporterMaterial ¶
type TLSExporterMaterial struct {
// contains filtered or unexported fields
}
from draft-05: The key exporter output is 48 bytes long. Of those, the first 32 bytes are part of the input to the signature and the next 16 bytes are sent alongside the signature. This allows the recipient to confirm that the exporter produces the right values.
func GenerateTLSExporterMaterial ¶
func GenerateTLSExporterMaterial(tls *tls.ConnectionState, signatureScheme tls.SignatureScheme, keyID KeyID, pubKey crypto.PublicKey, httpScheme string, httpHost string, httpPort uint16, httpRealm string) (TLSExporterMaterial, error)
func (*TLSExporterMaterial) SignatureInput ¶
func (m *TLSExporterMaterial) SignatureInput() [32]byte
func (*TLSExporterMaterial) String ¶
func (m *TLSExporterMaterial) String() string
func (*TLSExporterMaterial) Verification ¶
func (m *TLSExporterMaterial) Verification() [16]byte
type TLSSignatureSchemeNotSupported ¶
type TLSSignatureSchemeNotSupported struct { Scheme tls.SignatureScheme Reason string }
func (TLSSignatureSchemeNotSupported) Error ¶
func (e TLSSignatureSchemeNotSupported) Error() string
type UnsupportedKeyType ¶
type UnsupportedKeyType struct {
Type string
}
func (UnsupportedKeyType) Error ¶
func (e UnsupportedKeyType) Error() string