Documentation
¶
Index ¶
- Variables
- func DecryptShortBuffer(k []byte, rcvd any) ([]byte, error)
- func ECDHDecrypt(data []byte, privateKey ECDHHandler) ([]byte, error)
- func ECDHEncrypt(rnd io.Reader, data []byte, remote *ecdh.PublicKey) ([]byte, error)
- func EncryptShortBuffer(rand io.Reader, k []byte, rcvd crypto.PublicKey) ([]byte, error)
- func Hash(b []byte, alg ...func() hash.Hash) []byte
- func HybridEncrypt(rnd io.Reader, data []byte, remote *MLKEMPublicKey) ([]byte, error)
- func MLKEMDecrypt(data []byte, privateKey *MLKEMPrivateKey) ([]byte, error)
- func MLKEMEncrypt(rnd io.Reader, data []byte, remote *MLKEMPublicKey) ([]byte, error)
- func MarshalMLDSAPrivateKey(key crypto.Signer) ([]byte, error)
- func MarshalMLDSAPublicKey(pub crypto.PublicKey) ([]byte, error)
- func MarshalMLKEMPrivateKey(k *MLKEMPrivateKey) []byte
- func MarshalMLKEMPublicKey(k *MLKEMPublicKey) []byte
- func MarshalPKIXPublicKey(pub crypto.PublicKey) ([]byte, error)
- func MarshalSLHDSAPrivateKey(key *slhdsa.PrivateKey) ([]byte, error)
- func MarshalSLHDSAPublicKey(pub crypto.PublicKey) ([]byte, error)
- func MemClr(b []byte)
- func ParseMLDSAPrivateKey(der []byte) (crypto.Signer, error)
- func ParseMLDSAPublicKey(der []byte) (crypto.PublicKey, error)
- func ParseSLHDSAPrivateKey(der []byte) (*slhdsa.PrivateKey, error)
- func ParseSLHDSAPublicKey(der []byte) (*slhdsa.PublicKey, error)
- func Sign(rand io.Reader, key crypto.Signer, buf []byte, opts ...crypto.SignerOpts) ([]byte, error)
- func Verify(key crypto.PublicKey, buf, sig []byte, opts ...crypto.SignerOpts) error
- type Bottle
- type ECDHHandler
- type IDCard
- func (id *IDCard) AddKeyPurpose(k crypto.PublicKey, purposes ...string) error
- func (id *IDCard) AddKeychain(kc *Keychain)
- func (id *IDCard) FindGroup(k any) (*Membership, error)
- func (id *IDCard) FindKey(k any, create bool) (*SubKey, error)
- func (id *IDCard) GetKeys(purpose string) []crypto.PublicKey
- func (id *IDCard) SetKeyDuration(k crypto.PublicKey, t time.Duration) error
- func (id *IDCard) SetKeyPurposes(k crypto.PublicKey, purposes ...string) error
- func (id *IDCard) Sign(rand io.Reader, k crypto.Signer) ([]byte, error)
- func (id *IDCard) TestKeyPurpose(k any, purpose string) error
- func (id *IDCard) UnmarshalBinary(b []byte) error
- func (id *IDCard) UpdateGroups(data [][]byte) error
- type Keychain
- func (kc *Keychain) AddKey(k any) error
- func (kc *Keychain) AddKeys(keys ...any) error
- func (kc *Keychain) All(yield func(PrivateKey) bool)
- func (kc *Keychain) FirstSigner() crypto.Signer
- func (kc *Keychain) GetKey(public any) (PrivateKey, error)
- func (kc *Keychain) GetSigner(public any) (crypto.Signer, error)
- func (kc *Keychain) Sign(rand io.Reader, publicKey any, buf []byte, opts ...crypto.SignerOpts) ([]byte, error)
- func (kc *Keychain) Signers(yield func(crypto.Signer) bool)
- type MLDSAVariant
- type MLKEMPrivateKey
- func GenerateMLKEMKey(rand io.Reader, hybrid bool) (*MLKEMPrivateKey, error)
- func GenerateMLKEMKey1024(rand io.Reader, hybrid bool) (*MLKEMPrivateKey, error)
- func GenerateMLKEMKey768(rand io.Reader, hybrid bool) (*MLKEMPrivateKey, error)
- func ParseMLKEMPrivateKey(der []byte) (*MLKEMPrivateKey, error)
- func UnmarshalMLKEMPrivateKey(data []byte) (*MLKEMPrivateKey, error)
- type MLKEMPublicKey
- type MLKEMVariant
- type Membership
- type MessageFormat
- type MessageRecipient
- type MessageSignature
- type OpenResult
- type Opener
- func (o *Opener) Open(b *Bottle) ([]byte, *OpenResult, error)
- func (o *Opener) OpenCbor(b []byte) ([]byte, *OpenResult, error)
- func (o *Opener) OpenHttp(req *http.Request) ([]byte, *OpenResult, error)
- func (o *Opener) OpenJson(b []byte) ([]byte, *OpenResult, error)
- func (o *Opener) Unmarshal(b *Bottle, v any) (*OpenResult, error)
- func (o *Opener) UnmarshalCbor(b []byte, v any) (*OpenResult, error)
- func (o *Opener) UnmarshalHttp(req *http.Request, v any) (*OpenResult, error)
- func (o *Opener) UnmarshalJson(b []byte, v any) (*OpenResult, error)
- type PrivateKey
- type PublicKeyIntf
- type SubKey
Constants ¶
This section is empty.
Variables ¶
var ( ErrNoAppropriateKey = errors.New("no appropriate key available to open bottle") ErrVerifyFailed = errors.New("signature verification failed") ErrKeyNotFound = wraperr("the key was not found", fs.ErrNotExist) ErrGroupNotFound = wraperr("the group was not found", fs.ErrNotExist) ErrKeyUnfit = errors.New("the provided key was not fit") ErrEncryptNoRecipient = errors.New("cannot encrypt a message without at least one valid recipient") )
var EmptyOpener = &Opener{}
EmptyOpener is an opener without any keys that can open bottles, but can't check keys
Functions ¶
func DecryptShortBuffer ¶
DecryptShortBuffer decrypts a given buffer
func ECDHDecrypt ¶
func ECDHDecrypt(data []byte, privateKey ECDHHandler) ([]byte, error)
ECDHDecrypt decrypts data received for us, using the private key passed (can be a tpm, etc)
func ECDHEncrypt ¶
ECDHEncrypt encrypts data for receiving by remote
func EncryptShortBuffer ¶
EncryptShortBuffer performs a simple encryption of a buffer
func HybridEncrypt ¶
HybridEncrypt encrypts data using hybrid X25519 + ML-KEM mode. Format: <version=1><x25519 pubkey len><x25519 ephemeral pubkey><mlkem ciphertext len><mlkem ciphertext><nonce><encrypted data>
func MLKEMDecrypt ¶
func MLKEMDecrypt(data []byte, privateKey *MLKEMPrivateKey) ([]byte, error)
MLKEMDecrypt decrypts data encrypted with HybridEncrypt or MLKEMEncrypt.
func MLKEMEncrypt ¶
MLKEMEncrypt encrypts data using pure ML-KEM mode (no hybrid). Format: <version=2><mlkem ciphertext len><mlkem ciphertext><nonce><encrypted data>
func MarshalMLDSAPrivateKey ¶
MarshalMLDSAPrivateKey marshals an ML-DSA private key to PKCS#8/ASN.1 DER format.
func MarshalMLDSAPublicKey ¶
MarshalMLDSAPublicKey marshals an ML-DSA public key to PKIX/ASN.1 DER format.
func MarshalMLKEMPrivateKey ¶
func MarshalMLKEMPrivateKey(k *MLKEMPrivateKey) []byte
MarshalMLKEMPrivateKey marshals an MLKEMPrivateKey to a simple binary format. Deprecated: Use MarshalPKCS8PrivateKey for standard PKCS#8 encoding.
func MarshalMLKEMPublicKey ¶
func MarshalMLKEMPublicKey(k *MLKEMPublicKey) []byte
MarshalMLKEMPublicKey marshals an MLKEMPublicKey to a simple binary format. Deprecated: Use MarshalPKIXPublicKey for standard PKIX encoding.
func MarshalPKIXPublicKey ¶
MarshalPKIXPublicKey marshals a public key to PKIX/ASN.1 DER format. It supports all key types supported by crypto/x509.MarshalPKIXPublicKey as well as ML-KEM, ML-DSA, and SLH-DSA keys.
func MarshalSLHDSAPrivateKey ¶
func MarshalSLHDSAPrivateKey(key *slhdsa.PrivateKey) ([]byte, error)
MarshalSLHDSAPrivateKey marshals an SLH-DSA private key to PKCS#8/ASN.1 DER format.
func MarshalSLHDSAPublicKey ¶
MarshalSLHDSAPublicKey marshals an SLH-DSA public key to PKIX/ASN.1 DER format.
func MemClr ¶
func MemClr(b []byte)
MemClr is a simple function that will clear a buffer in order to make it easier to reset memory storing private keys on defer.
func ParseMLDSAPrivateKey ¶
ParseMLDSAPrivateKey parses a PKCS#8-encoded ML-DSA private key.
func ParseMLDSAPublicKey ¶
ParseMLDSAPublicKey parses a PKIX-encoded ML-DSA public key.
func ParseSLHDSAPrivateKey ¶
func ParseSLHDSAPrivateKey(der []byte) (*slhdsa.PrivateKey, error)
ParseSLHDSAPrivateKey parses a PKCS#8-encoded SLH-DSA private key.
func ParseSLHDSAPublicKey ¶
ParseSLHDSAPublicKey parses a PKIX-encoded SLH-DSA public key.
func Verify ¶
Verify will verify the given buffer against the signature, depending on the key type. If the key is a RSA key and PSS options are given, then the signature will be handled as a PSS signature.
Unlike Verify methods found in most packages, this one takes in the actual buffer to be signed and will perform the hash if it needs to be done.
Types ¶
type Bottle ¶
type Bottle struct {
Header map[string]any `json:"hdr,omitempty"` // extra values to be stored, will not be signed/encrypted unless the message is bottled
Message []byte `json:"msg"`
Format MessageFormat `json:"fmt"`
Recipients []*MessageRecipient `json:"dst,omitempty"` // if Format != ClearText
Signatures []*MessageSignature `json:"sig,omitempty"` // signature
// contains filtered or unexported fields
}
Bottle is a signed, encrypted message container. Any Format other than ClearText means the Message contains a Bottle that has been encrypted.
func AsCborBottle ¶
AsCborBottle considers data to be a cbor-encoded Bottle, and will return a Bottle container matching this assumption
func AsJsonBottle ¶
AsJsonBottle considers data to be a json-encoded Bottle, and will return a Bottle container matching this assumption
func MarshalJson ¶
MarshalJson will use json to marshal data into a bottle
func (*Bottle) BottleUp ¶
BottleUp encodes the current message into itself, allowing application of extra layers
func (*Bottle) Child ¶
Child is the reverse operation as BottleUp and will return the bottle's child. This will fail if the bottle is encrypted or does not contain another bottle.
func (*Bottle) IsCleanBottle ¶
IsCleanBottle returns true if the Bottle is clean (ie. so signature has been scribbed on top) and contains another Bottle.
func (*Bottle) Sign ¶
Sign signs the message, and can be called multiple times. Any message can be signed, including a raw message. It is however recommanded to bottle up an encrypted message before signing in order to ensure the encryption information is signed too.
Attempting to apply encryption to a message with a signature will always cause it to be bottled up
type IDCard ¶
type IDCard struct {
Self []byte `json:"self" cbor:"1,keyasint"` // our own public key (PKIX)
Issued time.Time `json:"iss" cbor:"2,keyasint"` // issuance date. If two IDCard exist for the same public key, the most recent one will be taken into account
SubKeys []*SubKey `json:"sub" cbor:"3,keyasint"` // known sub keys
Revoke []*SubKey `json:"rev" cbor:"4,keyasint"` // any key into the revoke list will be strongly rejected
Groups []*Membership `json:"grp" cbor:"5,keyasint"` // groups this key is member of
Meta map[string]string `json:"meta" cbor:"6,keyasint"` // self-defined metadata
}
IDCard is a basic ID for a given signature key that allows it to specify keys that can be used for encryption/etc
func (*IDCard) AddKeyPurpose ¶
AddKeyPurpose adds the given purpose(s) to the given key
func (*IDCard) AddKeychain ¶
AddKeychain adds the keys found in Keychain to the IDCard.
func (*IDCard) FindGroup ¶
func (id *IDCard) FindGroup(k any) (*Membership, error)
FindGroup locates the Membership matching the given key
func (*IDCard) FindKey ¶
FindKey locates the SubKey matching the given key, and optionally creates one if create is set to true
func (*IDCard) SetKeyDuration ¶
SetKeyDuration specifies the duration for the given key
func (*IDCard) SetKeyPurposes ¶
SetKeyPurposes specifies the purpose of a given key (sign, decrypt, etc)
func (*IDCard) TestKeyPurpose ¶
TestKeyPurpose return nil if the provided key is fit for the given purpose, a not found error if the key couldn't be found, or a ErrKeyUnfit
func (*IDCard) UnmarshalBinary ¶
UnmarshalBinary will read a signed ID card, returning an error if it wasn't signed
func (*IDCard) UpdateGroups ¶
UpdateGroups update the attached memberships based on the provided data
type Keychain ¶
type Keychain struct {
// contains filtered or unexported fields
}
Keychain is an object storing private keys that can be used to sign or decrypt things.
func (*Keychain) AddKey ¶
AddKey adds a key to the keychain. The value passed must be a PrivateKey whose Public() method returns a public key object that can be marshalled by crypto/x509.MarshalPKIXPublicKey, or an MLKEMPrivateKey. If another Keychain is passed all its keys will be added.
func (*Keychain) AddKeys ¶
AddKeys adds a number of keys to the keychain, and stops at the first error found.
func (*Keychain) All ¶
func (kc *Keychain) All(yield func(PrivateKey) bool)
All returns all the keys in the Keychain
func (*Keychain) FirstSigner ¶
FirstSigner returns the first crypto.Signer that was added to this Keychain.
func (*Keychain) GetKey ¶
func (kc *Keychain) GetKey(public any) (PrivateKey, error)
GetKey returns the private key matching the passed public key, if known. A []byte of the PKIX marshalled public key, a public key object, or an MLKEMPublicKey can be passed.
func (*Keychain) Sign ¶
func (kc *Keychain) Sign(rand io.Reader, publicKey any, buf []byte, opts ...crypto.SignerOpts) ([]byte, error)
Sign will use the specified key from the keychain to sign the given buffer. Unlike Go's standard sign method, the whole buffer should be passed and will be signed as needed.
type MLDSAVariant ¶
type MLDSAVariant byte
MLDSAVariant specifies the ML-DSA parameter set.
const ( MLDSA44 MLDSAVariant = 0 // ML-DSA-44 (NIST security level 2) MLDSA65 MLDSAVariant = 1 // ML-DSA-65 (NIST security level 3) MLDSA87 MLDSAVariant = 2 // ML-DSA-87 (NIST security level 5) )
type MLKEMPrivateKey ¶
type MLKEMPrivateKey struct {
X25519 *ecdh.PrivateKey // optional, for hybrid mode
// contains filtered or unexported fields
}
MLKEMPrivateKey wraps an ML-KEM decapsulation key with an optional X25519 key for hybrid mode.
func GenerateMLKEMKey ¶
func GenerateMLKEMKey(rand io.Reader, hybrid bool) (*MLKEMPrivateKey, error)
GenerateMLKEMKey generates a new ML-KEM-768 key pair. If hybrid is true, also generates an X25519 key pair. For ML-KEM-1024, use GenerateMLKEMKey1024.
func GenerateMLKEMKey1024 ¶
func GenerateMLKEMKey1024(rand io.Reader, hybrid bool) (*MLKEMPrivateKey, error)
GenerateMLKEMKey1024 generates a new ML-KEM-1024 key pair. If hybrid is true, also generates an X25519 key pair.
func GenerateMLKEMKey768 ¶
func GenerateMLKEMKey768(rand io.Reader, hybrid bool) (*MLKEMPrivateKey, error)
GenerateMLKEMKey768 generates a new ML-KEM-768 key pair. If hybrid is true, also generates an X25519 key pair.
func ParseMLKEMPrivateKey ¶
func ParseMLKEMPrivateKey(der []byte) (*MLKEMPrivateKey, error)
ParseMLKEMPrivateKey parses a PKCS#8-encoded ML-KEM private key.
func UnmarshalMLKEMPrivateKey ¶
func UnmarshalMLKEMPrivateKey(data []byte) (*MLKEMPrivateKey, error)
UnmarshalMLKEMPrivateKey unmarshals an MLKEMPrivateKey from simple binary format. Deprecated: Use ParseMLKEMPrivateKey for standard PKCS#8 encoding.
func (*MLKEMPrivateKey) IsHybrid ¶
func (k *MLKEMPrivateKey) IsHybrid() bool
IsHybrid returns true if this is a hybrid key (X25519 + ML-KEM).
func (*MLKEMPrivateKey) MLKEMPublic ¶
func (k *MLKEMPrivateKey) MLKEMPublic() *MLKEMPublicKey
MLKEMPublic returns the typed ML-KEM public key for this private key.
func (*MLKEMPrivateKey) MarshalPKCS8PrivateKey ¶
func (k *MLKEMPrivateKey) MarshalPKCS8PrivateKey() ([]byte, error)
MarshalPKCS8PrivateKey marshals an MLKEMPrivateKey to PKCS#8/ASN.1 DER format.
func (*MLKEMPrivateKey) Public ¶
func (k *MLKEMPrivateKey) Public() crypto.PublicKey
Public returns the public key for this private key as crypto.PublicKey. This implements the PrivateKey interface.
func (*MLKEMPrivateKey) Variant ¶
func (k *MLKEMPrivateKey) Variant() MLKEMVariant
Variant returns the ML-KEM variant (768 or 1024) for this key.
type MLKEMPublicKey ¶
type MLKEMPublicKey struct {
X25519 *ecdh.PublicKey // optional, for hybrid mode
// contains filtered or unexported fields
}
MLKEMPublicKey wraps an ML-KEM encapsulation key with an optional X25519 key for hybrid mode. When X25519 is set, encryption uses hybrid mode (X25519 + ML-KEM) for defense-in-depth.
func ParseMLKEMPublicKey ¶
func ParseMLKEMPublicKey(der []byte) (*MLKEMPublicKey, error)
ParseMLKEMPublicKey parses a PKIX-encoded ML-KEM public key.
func UnmarshalMLKEMPublicKey ¶
func UnmarshalMLKEMPublicKey(data []byte) (*MLKEMPublicKey, error)
UnmarshalMLKEMPublicKey unmarshals an MLKEMPublicKey from simple binary format. Deprecated: Use ParseMLKEMPublicKey for standard PKIX encoding.
func (*MLKEMPublicKey) Equal ¶
func (k *MLKEMPublicKey) Equal(other crypto.PublicKey) bool
Equal reports whether k and other have the same value.
func (*MLKEMPublicKey) IsHybrid ¶
func (k *MLKEMPublicKey) IsHybrid() bool
IsHybrid returns true if this is a hybrid key (X25519 + ML-KEM).
func (*MLKEMPublicKey) MarshalPKIXPublicKey ¶
func (k *MLKEMPublicKey) MarshalPKIXPublicKey() ([]byte, error)
MarshalPKIXPublicKey marshals an MLKEMPublicKey to PKIX/ASN.1 DER format. For hybrid keys, it uses a composite key format.
func (*MLKEMPublicKey) Variant ¶
func (k *MLKEMPublicKey) Variant() MLKEMVariant
Variant returns the ML-KEM variant (768 or 1024) for this key.
type MLKEMVariant ¶
type MLKEMVariant byte
MLKEMVariant specifies the ML-KEM parameter set.
const ( MLKEM768 MLKEMVariant = 0 // ML-KEM-768 (recommended for most applications) MLKEM1024 MLKEMVariant = 1 // ML-KEM-1024 (higher security level) )
type Membership ¶
type Membership struct {
Subject []byte `json:"sub" cbor:"1,keyasint"` // must be == parent.Self (if empty, fill with parent.Self before sig)
Key []byte `json:"key" cbor:"2,keyasint"` // group key (group identification)
Status string `json:"sta" cbor:"3,keyasint"` // status of membership (valid|suspended)
Issued time.Time `json:"iss" cbor:"4,keyasint"` // update time of membership info
Info map[string]string `json:"nfo" cbor:"5,keyasint"` // subject information (name, etc)
SignKey []byte `json:"sky" cbor:"6,keyasint"` // signature generating key (must be listed as sign key for the Key's IDCard)
Signature []byte `json:"sig" cbor:"7,keyasint"` // signature of structure with sign=nil by group key
}
Membership is a membership in a group.
func NewMembership ¶
func NewMembership(member *IDCard, key []byte) *Membership
func (*Membership) Sign ¶
func (m *Membership) Sign(rand io.Reader, key crypto.Signer, opts ...crypto.SignerOpts) error
Sign signs the membership using the provided key
func (*Membership) SignatureBytes ¶
func (m *Membership) SignatureBytes() ([]byte, error)
SignatureBytes returns a representation of Membership that can be used to sign or verify the structure
func (*Membership) Verify ¶
func (m *Membership) Verify(groupId *IDCard) error
Verify ensures the signature is correct. If the group ID is known, it must be passed.
type MessageFormat ¶
type MessageFormat int
const ( ClearText MessageFormat = iota CborBottle // bottle in a bottle AES // AES+AEAD encrypted cbor bottle JsonBottle // bottle in a bottle (json version) )
type MessageRecipient ¶
type MessageSignature ¶
type MessageSignature struct {
Type int `json:"typ,omitempty"` // always 0 (for now)
Signer []byte `json:"key"` // signature's key
Data []byte `json:"dat"` // signature payload, similar format to jwt (NOTE: ECDSA signatures are weird)
// contains filtered or unexported fields
}
func (*MessageSignature) Verify ¶
func (sig *MessageSignature) Verify(buf []byte, opts ...crypto.SignerOpts) error
type OpenResult ¶
type OpenResult struct {
Decryption int // number of performed decryptions
Signatures []*MessageSignature // verified message signatures
Bottles []*Bottle
}
func (*OpenResult) First ¶
func (or *OpenResult) First() *Bottle
First returns the first (outside-most) bottle, that will be what has been passed to Open
func (*OpenResult) Last ¶
func (or *OpenResult) Last() *Bottle
Last returns the last (inside-most) bottle, which will contain any relevant meta-data
type Opener ¶
type Opener struct {
// contains filtered or unexported fields
}
Opener allows opening a Bottle
func MustOpener ¶
MustOpener returns an opener that can be used to open a Bottle and panics if it fails
func NewOpener ¶
NewOpener returns an opener that can be used to open a Bottle using any or all of the given keys.
func (*Opener) Open ¶
func (o *Opener) Open(b *Bottle) ([]byte, *OpenResult, error)
Open opens the given Bottle, decrypting any encrypted elements, checking all signatures and returning the embedded buffer in the end
func (*Opener) OpenCbor ¶
func (o *Opener) OpenCbor(b []byte) ([]byte, *OpenResult, error)
OpenCbor opens the given Bottle encoded as cbor data.
func (*Opener) OpenHttp ¶
OpenHttp will read the data from a http.Request handling the content-type header.
func (*Opener) OpenJson ¶
func (o *Opener) OpenJson(b []byte) ([]byte, *OpenResult, error)
OpenJson opens the given Bottle encoded as json data.
func (*Opener) Unmarshal ¶
func (o *Opener) Unmarshal(b *Bottle, v any) (*OpenResult, error)
Unmarshal will open the given bottle and pour the contents into v
func (*Opener) UnmarshalCbor ¶
func (o *Opener) UnmarshalCbor(b []byte, v any) (*OpenResult, error)
UnmarshalCbor will open the given cbor-encoded bottle and pour the contents into v
func (*Opener) UnmarshalHttp ¶
UnmarshalHttp will read the data from a http.Request and unmarshal it into v.
func (*Opener) UnmarshalJson ¶
func (o *Opener) UnmarshalJson(b []byte, v any) (*OpenResult, error)
UnmarshalJson will open the given json-encoded bottle and pour the contents into v
type PrivateKey ¶
PrivateKey represents a private key using an unspecified algorithm.
All private keys must implement a method to retrieve the matching public key. The ones in the standard lbirary do.
type PublicKeyIntf ¶
PublicKeyIntf represents a public key using an unspecified algorithm.
all public key types in the standard library implement this interface
func ParsePKIXPublicKey ¶
func ParsePKIXPublicKey(der []byte) (PublicKeyIntf, error)
ParsePKIXPublicKey parses a PKIX-encoded public key. It supports all key types supported by crypto/x509.ParsePKIXPublicKey as well as ML-KEM, ML-DSA, and SLH-DSA keys.
func PublicKey ¶
func PublicKey(privKey crypto.PrivateKey) PublicKeyIntf
PublicKey returns the public key for a given private key, or nil if the argumlent is not a private key or if its Public() method returned nil.
type SubKey ¶
type SubKey struct {
Key []byte `json:"key" cbor:"1,keyasint"` // public key as PKIX
Issued time.Time `json:"iss" cbor:"2,keyasint"` // issuance (addition) date
Expires *time.Time `json:"exp,omitempty" cbor:"3,keyasint,omitempty"` // expiration date (if any)
Purposes []string `json:"pur" cbor:"4,keyasint"` // purposes: can contain "sign", "decrypt"
}
SubKey is a key found in a given id card
func (*SubKey) AddPurpose ¶
func (*SubKey) HasPurpose ¶
HasPurpose returns true if the key has the specified purpose listed