rsa/pkg/inspect/inspect.go

111 lines
2.2 KiB
Go

/*
Package inspect describes RSA-related objects such as private keys and X.509
certificates using structured, annotated key-value pairs.
*/
package inspect
// Type of item.
type Type int
const (
TypePrivateKey Type = iota
TypePublicKey
TypeX509Certificate
TypeX509CRL
TypeX509CSR
TypeTLSConnectionState
)
func (t Type) String() string {
switch t {
case TypePrivateKey:
return "RSA private key"
case TypePublicKey:
return "RSA public key"
case TypeX509Certificate:
return "X.509 certificate"
case TypeX509CRL:
return "certificate revocation list"
case TypeX509CSR:
return "certificate signing request"
case TypeTLSConnectionState:
return "TLS connection state"
default:
return "???"
}
}
// Info about an item.
type Info interface {
// Type of item.
Type() Type
// Location where the item was encountered (e.g. line number for a file,
// or position in certificate chain for TLS handshake.
Location() string
// Info returns a structured set of information about the item.
Info() []Section
}
// Section is a set of related fields.
type Section struct {
// Title of section.
Title string
// Fields contain a related set of key, value pairs.
Fields []Field
}
// Field is an aspect of information about an item.
type Field struct {
// Key is the name of the aspect.
Key string
// Value is its value.
Value any
}
// BadInfo is an item which cannot be parsed, e.g. an invalid DER-encoded item
// within a PEM block. It implements both error and Info.
type BadInfo struct {
Typ Type
Loc string
Underlying error
}
// Type reports the type of item that was being parsed.
func (b *BadInfo) Type() Type {
return b.Typ
}
// Location reports further information about the location of the item.
func (b *BadInfo) Location() string {
return b.Loc
}
// Info reports an "Error encountered" section with an "Error" field.
func (b *BadInfo) Info() []Section {
return []Section{
Section{
Title: "Error encountered",
Fields: []Field{
Field{
Key: "Error",
Value: b.Underlying,
},
},
},
}
}
// Error returns the underlying error string.
func (b *BadInfo) Error() string {
return b.Underlying.Error()
}
// Unwrap returns the underlying error.
func (b *BadInfo) Unwrap() error {
return b.Underlying
}