=pod

=head1 NAME

openssl-glossary - An OpenSSL Glossary

=head1 DESCRIPTION

=for comment Please keep the items in case-insensitive alphabetical order

=over 4

=item Algorithm

Cryptograpic primitives such as the SHA256 digest, or AES encryption are
referred to in OpenSSL as "algorithms". There can be more than one
implementation for any given algorithm available for use.

L<crypto(7)>

=item ASN.1, ASN1

ASN.1 ("Abstract Syntax Notation One") is a notation for describing abstract
types and values.  It is defined in the ITU-T documents X.680 to X.683:

L<https://www.itu.int/rec/T-REC-X.680>,
L<https://www.itu.int/rec/T-REC-X.681>,
L<https://www.itu.int/rec/T-REC-X.682>,
L<https://www.itu.int/rec/T-REC-X.683>

=item Base Provider

An OpenSSL Provider that contains encoders and decoders for OpenSSL keys.  All
the algorithm implementations in the Base Provider are also available in the
Default Provider.

L<OSSL_PROVIDER-base(7)>

=item Decoder

A decoder is a type of algorithm used for decoding keys and parameters from some
external format such as PEM or DER.

L<OSSL_DECODER_CTX_new_for_pkey(3)>

=item Default Provider

An OpenSSL Provider that contains the most commmon OpenSSL algorithm
implementations. It is loaded by default if no other provider is available. All
the algorithm implementations in the Base Provider are also available in the
Default Provider.

L<OSSL_PROVIDER-default(7)>

=item DER ("Distinguished Encoding Rules")

DER is a binary encoding of data, structured according to an ASN.1
specification.  This is a common encoding used for cryptographic objects
such as private and public keys, certificates, CRLs, ...

It is defined in ITU-T document X.690:

L<https://www.itu.int/rec/T-REC-X.690>

=item Encoder

An encoder is a type of algorithm used for encoding keys and parameters to some
external format such as PEM or DER.

L<OSSL_ENCODER_CTX_new_for_pkey(3)>

=item Explicit Fetching

Explicit Fetching is a type of Fetching (see Fetching). Explicit Fetching is
where a function call is made to obtain an algorithm object representing an
implementation such as L<EVP_MD_fetch(3)> or L<EVP_CIPHER_fetch(3)>

=item Fetching

Fetching is the process of looking through the available algorithm
implementations, applying selection criteria (via a property query string), and
finally choosing the implementation that will be used.

Also see Explicit Fetching and Implict Fetching.

L<crypto(7)>

=item FIPS Provider

An OpenSSL Provider that contains OpenSSL algorithm implementations that have
been validated according to the FIPS 140-2 standard.

L<OSSL_PROVIDER-FIPS(7)>

=item Implicit Fetching

Implicit Fetching is a type of Fetching (see Fetching). Implicit Fetching is
where an algorithm object with no associated implementation is used such as the
return value from L<EVP_sha256(3)> or L<EVP_aes_128_cbc(3)>. With implicit
fetching an implementation is fetched automatically using default selection
criteria the first time the algorithm is used.

=item Legacy Provider

An OpenSSL Provider that contains algorithm implementations that are considered
insecure or are no longer in common use.

L<OSSL_PROVIDER-legacy(7)>

=item Library Context

A Library Context in OpenSSL is represented by the type B<OSSL_LIB_CTX>. It can
be thought of as a scope within which configuration options apply. If an
application does not explicitly create a library context then the "default"
one is used. Many OpenSSL functions can take a library context as an argument.
A NULL value can always be passed to indicate the default library context.

L<OSSL_LIB_CTX(3)>

=item MSBLOB

MSBLOB is a Microsoft specific binary format for RSA and DSA keys, both
private and public.  This form is never passphrase protected.

=item Null Provider

An OpenSSL Provider that contains no algorithm implementations. This can be
useful to prevent the default provider from being automatically loaded in a
library context.

L<OSSL_PROVIDER-null(7)>

=item Operation

An operation is a group of OpenSSL functions with a common purpose such as 
encryption, or digesting.

L<crypto(7)>

=item PEM ("Privacy Enhanced Message")

PEM is a format used for encoding of binary content into a mail and ASCII
friendly form.  The content is a series of base64-encoded lines, surrounded
by begin/end markers each on their own line.  For example:

 -----BEGIN PRIVATE KEY-----
 MIICdg....
 ... bhTQ==
 -----END PRIVATE KEY-----

Optional header line(s) may appear after the begin line, and their existence
depends on the type of object being written or read.

For all OpenSSL uses, the binary content is expected to be a DER encoded
structure.

This is defined in IETF RFC 1421:

L<https://tools.ietf.org/html/rfc1421>

=item PKCS#8 (also known as "pkcs8" in some parts of OpenSSL)

PKCS#8 is a specification of an ASN.1 structure that OpenSSL uses for
storing or transmitting any private key in a key type agnostic manner, and
has both an unencrypted and an encrypted form.

This is specified in RFC 5208:

L<https://tools.ietf.org/html/rfc5208>

=item Property

A property is a way of classifying and selecting algorithm implementations.
A property is a key/value pair expressed as a string. For example all algorithm
implementations in the default provider have the property "provider=default".
An algorithm implementation can have multiple properties defined against it.

Also see Property Query String.

L<property(7)>

=item Property Query String

A property query string is a string containing a sequence of properties that
can be used to select an algorithm implementation. For example the query string
"provider=example,foo=bar" will select algorithms from the "example" provider
that have a "foo" property defined for them with a value of "bar".

Property Query Strings are used during fetching. See Fetching.

L<property(7)>

=item Provider

A provider in OpenSSL is a component that groups together algorithm
implementations. Providers can come from OpenSSL itself or from third parties.

L<provider(7)>

=item PVK

PVK is a Microsoft specific binary format for RSA and DSA private keys.
This form may be passphrase protected.

=item SubjectPublicKeyInfo

SubjectPublicKeyInfo is an ASN.1 structure that OpenSSL uses for storing and
transmitting any public key in a key type agnostic manner.

This is specified as part of the specification for certificates, RFC 5280:

L<https://tools.ietf.org/html/rfc5280>

=back

=head1 HISTORY

This glossary was added in OpenSSL 3.0.

=head1 COPYRIGHT

Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.

Licensed under the Apache License 2.0 (the "License").  You may not use
this file except in compliance with the License.  You can obtain a copy
in the file LICENSE in the source distribution or at
L<https://www.openssl.org/source/license.html>.

=cut
