Blame doc/man1/smime.pod

Packit c4476c
=pod
Packit c4476c
Packit c4476c
=head1 NAME
Packit c4476c
Packit c4476c
openssl-smime,
Packit c4476c
smime - S/MIME utility
Packit c4476c
Packit c4476c
=head1 SYNOPSIS
Packit c4476c
Packit c4476c
B<openssl> B<smime>
Packit c4476c
[B<-help>]
Packit c4476c
[B<-encrypt>]
Packit c4476c
[B<-decrypt>]
Packit c4476c
[B<-sign>]
Packit c4476c
[B<-resign>]
Packit c4476c
[B<-verify>]
Packit c4476c
[B<-pk7out>]
Packit c4476c
[B<-binary>]
Packit c4476c
[B<-crlfeol>]
Packit c4476c
[B<-I<cipher>>]
Packit c4476c
[B<-in file>]
Packit c4476c
[B<-CAfile file>]
Packit c4476c
[B<-CApath dir>]
Packit c4476c
[B<-no-CAfile>]
Packit c4476c
[B<-no-CApath>]
Packit c4476c
[B<-attime timestamp>]
Packit c4476c
[B<-check_ss_sig>]
Packit c4476c
[B<-crl_check>]
Packit c4476c
[B<-crl_check_all>]
Packit c4476c
[B<-explicit_policy>]
Packit c4476c
[B<-extended_crl>]
Packit c4476c
[B<-ignore_critical>]
Packit c4476c
[B<-inhibit_any>]
Packit c4476c
[B<-inhibit_map>]
Packit c4476c
[B<-partial_chain>]
Packit c4476c
[B<-policy arg>]
Packit c4476c
[B<-policy_check>]
Packit c4476c
[B<-policy_print>]
Packit c4476c
[B<-purpose purpose>]
Packit c4476c
[B<-suiteB_128>]
Packit c4476c
[B<-suiteB_128_only>]
Packit c4476c
[B<-suiteB_192>]
Packit c4476c
[B<-trusted_first>]
Packit c4476c
[B<-no_alt_chains>]
Packit c4476c
[B<-use_deltas>]
Packit c4476c
[B<-auth_level num>]
Packit c4476c
[B<-verify_depth num>]
Packit c4476c
[B<-verify_email email>]
Packit c4476c
[B<-verify_hostname hostname>]
Packit c4476c
[B<-verify_ip ip>]
Packit c4476c
[B<-verify_name name>]
Packit c4476c
[B<-x509_strict>]
Packit c4476c
[B<-certfile file>]
Packit c4476c
[B<-signer file>]
Packit c4476c
[B<-recip  file>]
Packit c4476c
[B<-inform SMIME|PEM|DER>]
Packit c4476c
[B<-passin arg>]
Packit c4476c
[B<-inkey file_or_id>]
Packit c4476c
[B<-out file>]
Packit c4476c
[B<-outform SMIME|PEM|DER>]
Packit c4476c
[B<-content file>]
Packit c4476c
[B<-to addr>]
Packit c4476c
[B<-from ad>]
Packit c4476c
[B<-subject s>]
Packit c4476c
[B<-text>]
Packit c4476c
[B<-indef>]
Packit c4476c
[B<-noindef>]
Packit c4476c
[B<-stream>]
Packit c4476c
[B<-rand file...>]
Packit c4476c
[B<-writerand file>]
Packit c4476c
[B<-md digest>]
Packit c4476c
[cert.pem]...
Packit c4476c
Packit c4476c
=head1 DESCRIPTION
Packit c4476c
Packit c4476c
The B<smime> command handles S/MIME mail. It can encrypt, decrypt, sign and
Packit c4476c
verify S/MIME messages.
Packit c4476c
Packit c4476c
=head1 OPTIONS
Packit c4476c
Packit c4476c
There are six operation options that set the type of operation to be performed.
Packit c4476c
The meaning of the other options varies according to the operation type.
Packit c4476c
Packit c4476c
=over 4
Packit c4476c
Packit c4476c
=item B<-help>
Packit c4476c
Packit c4476c
Print out a usage message.
Packit c4476c
Packit c4476c
=item B<-encrypt>
Packit c4476c
Packit c4476c
Encrypt mail for the given recipient certificates. Input file is the message
Packit c4476c
to be encrypted. The output file is the encrypted mail in MIME format.
Packit c4476c
Packit c4476c
Note that no revocation check is done for the recipient cert, so if that
Packit c4476c
key has been compromised, others may be able to decrypt the text.
Packit c4476c
Packit c4476c
=item B<-decrypt>
Packit c4476c
Packit c4476c
Decrypt mail using the supplied certificate and private key. Expects an
Packit c4476c
encrypted mail message in MIME format for the input file. The decrypted mail
Packit c4476c
is written to the output file.
Packit c4476c
Packit c4476c
=item B<-sign>
Packit c4476c
Packit c4476c
Sign mail using the supplied certificate and private key. Input file is
Packit c4476c
the message to be signed. The signed message in MIME format is written
Packit c4476c
to the output file.
Packit c4476c
Packit c4476c
=item B<-verify>
Packit c4476c
Packit c4476c
Verify signed mail. Expects a signed mail message on input and outputs
Packit c4476c
the signed data. Both clear text and opaque signing is supported.
Packit c4476c
Packit c4476c
=item B<-pk7out>
Packit c4476c
Packit c4476c
Takes an input message and writes out a PEM encoded PKCS#7 structure.
Packit c4476c
Packit c4476c
=item B<-resign>
Packit c4476c
Packit c4476c
Resign a message: take an existing message and one or more new signers.
Packit c4476c
Packit c4476c
=item B<-in filename>
Packit c4476c
Packit c4476c
The input message to be encrypted or signed or the MIME message to
Packit c4476c
be decrypted or verified.
Packit c4476c
Packit c4476c
=item B<-inform SMIME|PEM|DER>
Packit c4476c
Packit c4476c
This specifies the input format for the PKCS#7 structure. The default
Packit c4476c
is B<SMIME> which reads an S/MIME format message. B<PEM> and B<DER>
Packit c4476c
format change this to expect PEM and DER format PKCS#7 structures
Packit c4476c
instead. This currently only affects the input format of the PKCS#7
Packit c4476c
structure, if no PKCS#7 structure is being input (for example with
Packit c4476c
B<-encrypt> or B<-sign>) this option has no effect.
Packit c4476c
Packit c4476c
=item B<-out filename>
Packit c4476c
Packit c4476c
The message text that has been decrypted or verified or the output MIME
Packit c4476c
format message that has been signed or verified.
Packit c4476c
Packit c4476c
=item B<-outform SMIME|PEM|DER>
Packit c4476c
Packit c4476c
This specifies the output format for the PKCS#7 structure. The default
Packit c4476c
is B<SMIME> which write an S/MIME format message. B<PEM> and B<DER>
Packit c4476c
format change this to write PEM and DER format PKCS#7 structures
Packit c4476c
instead. This currently only affects the output format of the PKCS#7
Packit c4476c
structure, if no PKCS#7 structure is being output (for example with
Packit c4476c
B<-verify> or B<-decrypt>) this option has no effect.
Packit c4476c
Packit c4476c
=item B<-stream -indef -noindef>
Packit c4476c
Packit c4476c
The B<-stream> and B<-indef> options are equivalent and enable streaming I/O
Packit c4476c
for encoding operations. This permits single pass processing of data without
Packit c4476c
the need to hold the entire contents in memory, potentially supporting very
Packit c4476c
large files. Streaming is automatically set for S/MIME signing with detached
Packit c4476c
data if the output format is B<SMIME> it is currently off by default for all
Packit c4476c
other operations.
Packit c4476c
Packit c4476c
=item B<-noindef>
Packit c4476c
Packit c4476c
Disable streaming I/O where it would produce and indefinite length constructed
Packit c4476c
encoding. This option currently has no effect. In future streaming will be
Packit c4476c
enabled by default on all relevant operations and this option will disable it.
Packit c4476c
Packit c4476c
=item B<-content filename>
Packit c4476c
Packit c4476c
This specifies a file containing the detached content, this is only
Packit c4476c
useful with the B<-verify> command. This is only usable if the PKCS#7
Packit c4476c
structure is using the detached signature form where the content is
Packit c4476c
not included. This option will override any content if the input format
Packit c4476c
is S/MIME and it uses the multipart/signed MIME content type.
Packit c4476c
Packit c4476c
=item B<-text>
Packit c4476c
Packit c4476c
This option adds plain text (text/plain) MIME headers to the supplied
Packit c4476c
message if encrypting or signing. If decrypting or verifying it strips
Packit c4476c
off text headers: if the decrypted or verified message is not of MIME
Packit c4476c
type text/plain then an error occurs.
Packit c4476c
Packit c4476c
=item B<-CAfile file>
Packit c4476c
Packit c4476c
A file containing trusted CA certificates, only used with B<-verify>.
Packit c4476c
Packit c4476c
=item B<-CApath dir>
Packit c4476c
Packit c4476c
A directory containing trusted CA certificates, only used with
Packit c4476c
B<-verify>. This directory must be a standard certificate directory: that
Packit c4476c
is a hash of each subject name (using B<x509 -hash>) should be linked
Packit c4476c
to each certificate.
Packit c4476c
Packit c4476c
=item B<-no-CAfile>
Packit c4476c
Packit c4476c
Do not load the trusted CA certificates from the default file location.
Packit c4476c
Packit c4476c
=item B<-no-CApath>
Packit c4476c
Packit c4476c
Do not load the trusted CA certificates from the default directory location.
Packit c4476c
Packit c4476c
=item B<-md digest>
Packit c4476c
Packit c4476c
Digest algorithm to use when signing or resigning. If not present then the
Packit c4476c
default digest algorithm for the signing key will be used (usually SHA1).
Packit c4476c
Packit c4476c
=item B<-I<cipher>>
Packit c4476c
Packit c4476c
The encryption algorithm to use. For example DES  (56 bits) - B<-des>,
Packit c4476c
triple DES (168 bits) - B<-des3>,
Packit c4476c
EVP_get_cipherbyname() function) can also be used preceded by a dash, for
Packit c4476c
example B<-aes-128-cbc>. See L<B<enc>|enc(1)> for list of ciphers
Packit c4476c
supported by your version of OpenSSL.
Packit c4476c
Packit c4476c
If not specified triple DES is used. Only used with B<-encrypt>.
Packit c4476c
Packit c4476c
=item B<-nointern>
Packit c4476c
Packit c4476c
When verifying a message normally certificates (if any) included in
Packit c4476c
the message are searched for the signing certificate. With this option
Packit c4476c
only the certificates specified in the B<-certfile> option are used.
Packit c4476c
The supplied certificates can still be used as untrusted CAs however.
Packit c4476c
Packit c4476c
=item B<-noverify>
Packit c4476c
Packit c4476c
Do not verify the signers certificate of a signed message.
Packit c4476c
Packit c4476c
=item B<-nochain>
Packit c4476c
Packit c4476c
Do not do chain verification of signers certificates: that is don't
Packit c4476c
use the certificates in the signed message as untrusted CAs.
Packit c4476c
Packit c4476c
=item B<-nosigs>
Packit c4476c
Packit c4476c
Don't try to verify the signatures on the message.
Packit c4476c
Packit c4476c
=item B<-nocerts>
Packit c4476c
Packit c4476c
When signing a message the signer's certificate is normally included
Packit c4476c
with this option it is excluded. This will reduce the size of the
Packit c4476c
signed message but the verifier must have a copy of the signers certificate
Packit c4476c
available locally (passed using the B<-certfile> option for example).
Packit c4476c
Packit c4476c
=item B<-noattr>
Packit c4476c
Packit c4476c
Normally when a message is signed a set of attributes are included which
Packit c4476c
include the signing time and supported symmetric algorithms. With this
Packit c4476c
option they are not included.
Packit c4476c
Packit c4476c
=item B<-binary>
Packit c4476c
Packit c4476c
Normally the input message is converted to "canonical" format which is
Packit c4476c
effectively using CR and LF as end of line: as required by the S/MIME
Packit c4476c
specification. When this option is present no translation occurs. This
Packit c4476c
is useful when handling binary data which may not be in MIME format.
Packit c4476c
Packit c4476c
=item B<-crlfeol>
Packit c4476c
Packit c4476c
Normally the output file uses a single B<LF> as end of line. When this
Packit c4476c
option is present B<CRLF> is used instead.
Packit c4476c
Packit c4476c
=item B<-nodetach>
Packit c4476c
Packit c4476c
When signing a message use opaque signing: this form is more resistant
Packit c4476c
to translation by mail relays but it cannot be read by mail agents that
Packit c4476c
do not support S/MIME.  Without this option cleartext signing with
Packit c4476c
the MIME type multipart/signed is used.
Packit c4476c
Packit c4476c
=item B<-certfile file>
Packit c4476c
Packit c4476c
Allows additional certificates to be specified. When signing these will
Packit c4476c
be included with the message. When verifying these will be searched for
Packit c4476c
the signers certificates. The certificates should be in PEM format.
Packit c4476c
Packit c4476c
=item B<-signer file>
Packit c4476c
Packit c4476c
A signing certificate when signing or resigning a message, this option can be
Packit c4476c
used multiple times if more than one signer is required. If a message is being
Packit c4476c
verified then the signers certificates will be written to this file if the
Packit c4476c
verification was successful.
Packit c4476c
Packit c4476c
=item B<-recip file>
Packit c4476c
Packit c4476c
The recipients certificate when decrypting a message. This certificate
Packit c4476c
must match one of the recipients of the message or an error occurs.
Packit c4476c
Packit c4476c
=item B<-inkey file_or_id>
Packit c4476c
Packit c4476c
The private key to use when signing or decrypting. This must match the
Packit c4476c
corresponding certificate. If this option is not specified then the
Packit c4476c
private key must be included in the certificate file specified with
Packit c4476c
the B<-recip> or B<-signer> file. When signing this option can be used
Packit c4476c
multiple times to specify successive keys.
Packit c4476c
If no engine is used, the argument is taken as a file; if an engine is
Packit c4476c
specified, the argument is given to the engine as a key identifier.
Packit c4476c
Packit c4476c
=item B<-passin arg>
Packit c4476c
Packit c4476c
The private key password source. For more information about the format of B<arg>
Packit c4476c
see the B<PASS PHRASE ARGUMENTS> section in L<openssl(1)>.
Packit c4476c
Packit c4476c
=item B<-rand file...>
Packit c4476c
Packit c4476c
A file or files containing random data used to seed the random number
Packit c4476c
generator.
Packit c4476c
Multiple files can be specified separated by an OS-dependent character.
Packit c4476c
The separator is B<;> for MS-Windows, B<,> for OpenVMS, and B<:> for
Packit c4476c
all others.
Packit c4476c
Packit c4476c
=item [B<-writerand file>]
Packit c4476c
Packit c4476c
Writes random data to the specified I<file> upon exit.
Packit c4476c
This can be used with a subsequent B<-rand> flag.
Packit c4476c
Packit c4476c
=item B<cert.pem...>
Packit c4476c
Packit c4476c
One or more certificates of message recipients: used when encrypting
Packit c4476c
a message.
Packit c4476c
Packit c4476c
=item B<-to, -from, -subject>
Packit c4476c
Packit c4476c
The relevant mail headers. These are included outside the signed
Packit c4476c
portion of a message so they may be included manually. If signing
Packit c4476c
then many S/MIME mail clients check the signers certificate's email
Packit c4476c
address matches that specified in the From: address.
Packit c4476c
Packit c4476c
=item B<-attime>, B<-check_ss_sig>, B<-crl_check>, B<-crl_check_all>,
Packit c4476c
B<-explicit_policy>, B<-extended_crl>, B<-ignore_critical>, B<-inhibit_any>,
Packit c4476c
B<-inhibit_map>, B<-no_alt_chains>, B<-partial_chain>, B<-policy>,
Packit c4476c
B<-policy_check>, B<-policy_print>, B<-purpose>, B<-suiteB_128>,
Packit c4476c
B<-suiteB_128_only>, B<-suiteB_192>, B<-trusted_first>, B<-use_deltas>,
Packit c4476c
B<-auth_level>, B<-verify_depth>, B<-verify_email>, B<-verify_hostname>,
Packit c4476c
B<-verify_ip>, B<-verify_name>, B<-x509_strict>
Packit c4476c
Packit c4476c
Set various options of certificate chain verification. See
Packit c4476c
L<verify(1)> manual page for details.
Packit c4476c
Packit c4476c
=back
Packit c4476c
Packit c4476c
=head1 NOTES
Packit c4476c
Packit c4476c
The MIME message must be sent without any blank lines between the
Packit c4476c
headers and the output. Some mail programs will automatically add
Packit c4476c
a blank line. Piping the mail directly to sendmail is one way to
Packit c4476c
achieve the correct format.
Packit c4476c
Packit c4476c
The supplied message to be signed or encrypted must include the
Packit c4476c
necessary MIME headers or many S/MIME clients won't display it
Packit c4476c
properly (if at all). You can use the B<-text> option to automatically
Packit c4476c
add plain text headers.
Packit c4476c
Packit c4476c
A "signed and encrypted" message is one where a signed message is
Packit c4476c
then encrypted. This can be produced by encrypting an already signed
Packit c4476c
message: see the examples section.
Packit c4476c
Packit c4476c
This version of the program only allows one signer per message but it
Packit c4476c
will verify multiple signers on received messages. Some S/MIME clients
Packit c4476c
choke if a message contains multiple signers. It is possible to sign
Packit c4476c
messages "in parallel" by signing an already signed message.
Packit c4476c
Packit c4476c
The options B<-encrypt> and B<-decrypt> reflect common usage in S/MIME
Packit c4476c
clients. Strictly speaking these process PKCS#7 enveloped data: PKCS#7
Packit c4476c
encrypted data is used for other purposes.
Packit c4476c
Packit c4476c
The B<-resign> option uses an existing message digest when adding a new
Packit c4476c
signer. This means that attributes must be present in at least one existing
Packit c4476c
signer using the same message digest or this operation will fail.
Packit c4476c
Packit c4476c
The B<-stream> and B<-indef> options enable streaming I/O support.
Packit c4476c
As a result the encoding is BER using indefinite length constructed encoding
Packit c4476c
and no longer DER. Streaming is supported for the B<-encrypt> operation and the
Packit c4476c
B<-sign> operation if the content is not detached.
Packit c4476c
Packit c4476c
Streaming is always used for the B<-sign> operation with detached data but
Packit c4476c
since the content is no longer part of the PKCS#7 structure the encoding
Packit c4476c
remains DER.
Packit c4476c
Packit c4476c
=head1 EXIT CODES
Packit c4476c
Packit c4476c
=over 4
Packit c4476c
Packit c4476c
=item Z<>0
Packit c4476c
Packit c4476c
The operation was completely successfully.
Packit c4476c
Packit c4476c
=item Z<>1
Packit c4476c
Packit c4476c
An error occurred parsing the command options.
Packit c4476c
Packit c4476c
=item Z<>2
Packit c4476c
Packit c4476c
One of the input files could not be read.
Packit c4476c
Packit c4476c
=item Z<>3
Packit c4476c
Packit c4476c
An error occurred creating the PKCS#7 file or when reading the MIME
Packit c4476c
message.
Packit c4476c
Packit c4476c
=item Z<>4
Packit c4476c
Packit c4476c
An error occurred decrypting or verifying the message.
Packit c4476c
Packit c4476c
=item Z<>5
Packit c4476c
Packit c4476c
The message was verified correctly but an error occurred writing out
Packit c4476c
the signers certificates.
Packit c4476c
Packit c4476c
=back
Packit c4476c
Packit c4476c
=head1 EXAMPLES
Packit c4476c
Packit c4476c
Create a cleartext signed message:
Packit c4476c
Packit c4476c
 openssl smime -sign -in message.txt -text -out mail.msg \
Packit c4476c
        -signer mycert.pem
Packit c4476c
Packit c4476c
Create an opaque signed message:
Packit c4476c
Packit c4476c
 openssl smime -sign -in message.txt -text -out mail.msg -nodetach \
Packit c4476c
        -signer mycert.pem
Packit c4476c
Packit c4476c
Create a signed message, include some additional certificates and
Packit c4476c
read the private key from another file:
Packit c4476c
Packit c4476c
 openssl smime -sign -in in.txt -text -out mail.msg \
Packit c4476c
        -signer mycert.pem -inkey mykey.pem -certfile mycerts.pem
Packit c4476c
Packit c4476c
Create a signed message with two signers:
Packit c4476c
Packit c4476c
 openssl smime -sign -in message.txt -text -out mail.msg \
Packit c4476c
        -signer mycert.pem -signer othercert.pem
Packit c4476c
Packit c4476c
Send a signed message under Unix directly to sendmail, including headers:
Packit c4476c
Packit c4476c
 openssl smime -sign -in in.txt -text -signer mycert.pem \
Packit c4476c
        -from steve@openssl.org -to someone@somewhere \
Packit c4476c
        -subject "Signed message" | sendmail someone@somewhere
Packit c4476c
Packit c4476c
Verify a message and extract the signer's certificate if successful:
Packit c4476c
Packit c4476c
 openssl smime -verify -in mail.msg -signer user.pem -out signedtext.txt
Packit c4476c
Packit c4476c
Send encrypted mail using triple DES:
Packit c4476c
Packit c4476c
 openssl smime -encrypt -in in.txt -from steve@openssl.org \
Packit c4476c
        -to someone@somewhere -subject "Encrypted message" \
Packit c4476c
        -des3 user.pem -out mail.msg
Packit c4476c
Packit c4476c
Sign and encrypt mail:
Packit c4476c
Packit c4476c
 openssl smime -sign -in ml.txt -signer my.pem -text \
Packit c4476c
        | openssl smime -encrypt -out mail.msg \
Packit c4476c
        -from steve@openssl.org -to someone@somewhere \
Packit c4476c
        -subject "Signed and Encrypted message" -des3 user.pem
Packit c4476c
Packit c4476c
Note: the encryption command does not include the B<-text> option because the
Packit c4476c
message being encrypted already has MIME headers.
Packit c4476c
Packit c4476c
Decrypt mail:
Packit c4476c
Packit c4476c
 openssl smime -decrypt -in mail.msg -recip mycert.pem -inkey key.pem
Packit c4476c
Packit c4476c
The output from Netscape form signing is a PKCS#7 structure with the
Packit c4476c
detached signature format. You can use this program to verify the
Packit c4476c
signature by line wrapping the base64 encoded structure and surrounding
Packit c4476c
it with:
Packit c4476c
Packit c4476c
 -----BEGIN PKCS7-----
Packit c4476c
 -----END PKCS7-----
Packit c4476c
Packit c4476c
and using the command:
Packit c4476c
Packit c4476c
 openssl smime -verify -inform PEM -in signature.pem -content content.txt
Packit c4476c
Packit c4476c
Alternatively you can base64 decode the signature and use:
Packit c4476c
Packit c4476c
 openssl smime -verify -inform DER -in signature.der -content content.txt
Packit c4476c
Packit c4476c
Create an encrypted message using 128 bit Camellia:
Packit c4476c
Packit c4476c
 openssl smime -encrypt -in plain.txt -camellia128 -out mail.msg cert.pem
Packit c4476c
Packit c4476c
Add a signer to an existing message:
Packit c4476c
Packit c4476c
 openssl smime -resign -in mail.msg -signer newsign.pem -out mail2.msg
Packit c4476c
Packit c4476c
=head1 BUGS
Packit c4476c
Packit c4476c
The MIME parser isn't very clever: it seems to handle most messages that I've
Packit c4476c
thrown at it but it may choke on others.
Packit c4476c
Packit c4476c
The code currently will only write out the signer's certificate to a file: if
Packit c4476c
the signer has a separate encryption certificate this must be manually
Packit c4476c
extracted. There should be some heuristic that determines the correct
Packit c4476c
encryption certificate.
Packit c4476c
Packit c4476c
Ideally a database should be maintained of a certificates for each email
Packit c4476c
address.
Packit c4476c
Packit c4476c
The code doesn't currently take note of the permitted symmetric encryption
Packit c4476c
algorithms as supplied in the SMIMECapabilities signed attribute. This means the
Packit c4476c
user has to manually include the correct encryption algorithm. It should store
Packit c4476c
the list of permitted ciphers in a database and only use those.
Packit c4476c
Packit c4476c
No revocation checking is done on the signer's certificate.
Packit c4476c
Packit c4476c
The current code can only handle S/MIME v2 messages, the more complex S/MIME v3
Packit c4476c
structures may cause parsing errors.
Packit c4476c
Packit c4476c
=head1 HISTORY
Packit c4476c
Packit c4476c
The use of multiple B<-signer> options and the B<-resign> command were first
Packit c4476c
added in OpenSSL 1.0.0
Packit c4476c
Packit c4476c
The -no_alt_chains option was added in OpenSSL 1.1.0.
Packit c4476c
Packit c4476c
=head1 COPYRIGHT
Packit c4476c
Packit c4476c
Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved.
Packit c4476c
Packit c4476c
Licensed under the OpenSSL license (the "License").  You may not use
Packit c4476c
this file except in compliance with the License.  You can obtain a copy
Packit c4476c
in the file LICENSE in the source distribution or at
Packit c4476c
L<https://www.openssl.org/source/license.html>.
Packit c4476c
Packit c4476c
=cut