/*
 * Generated by util/mkerr.pl DO NOT EDIT
 * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
 *
 * Licensed under the OpenSSL license (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
 * https://www.openssl.org/source/license.html
 */

#include <stdio.h>
#include <openssl/err.h>
#include <openssl/cms.h>

/* BEGIN ERROR CODES */
#ifndef OPENSSL_NO_ERR

# define ERR_FUNC(func) ERR_PACK(ERR_LIB_CMS,func,0)
# define ERR_REASON(reason) ERR_PACK(ERR_LIB_CMS,0,reason)

static ERR_STRING_DATA CMS_str_functs[] = {
    {ERR_FUNC(CMS_F_CHECK_CONTENT), "check_content"},
    {ERR_FUNC(CMS_F_CMS_ADD0_CERT), "CMS_add0_cert"},
    {ERR_FUNC(CMS_F_CMS_ADD0_RECIPIENT_KEY), "CMS_add0_recipient_key"},
    {ERR_FUNC(CMS_F_CMS_ADD0_RECIPIENT_PASSWORD),
     "CMS_add0_recipient_password"},
    {ERR_FUNC(CMS_F_CMS_ADD1_RECEIPTREQUEST), "CMS_add1_ReceiptRequest"},
    {ERR_FUNC(CMS_F_CMS_ADD1_RECIPIENT_CERT), "CMS_add1_recipient_cert"},
    {ERR_FUNC(CMS_F_CMS_ADD1_SIGNER), "CMS_add1_signer"},
    {ERR_FUNC(CMS_F_CMS_ADD1_SIGNINGTIME), "cms_add1_signingTime"},
    {ERR_FUNC(CMS_F_CMS_COMPRESS), "CMS_compress"},
    {ERR_FUNC(CMS_F_CMS_COMPRESSEDDATA_CREATE), "cms_CompressedData_create"},
    {ERR_FUNC(CMS_F_CMS_COMPRESSEDDATA_INIT_BIO),
     "cms_CompressedData_init_bio"},
    {ERR_FUNC(CMS_F_CMS_COPY_CONTENT), "cms_copy_content"},
    {ERR_FUNC(CMS_F_CMS_COPY_MESSAGEDIGEST), "cms_copy_messageDigest"},
    {ERR_FUNC(CMS_F_CMS_DATA), "CMS_data"},
    {ERR_FUNC(CMS_F_CMS_DATAFINAL), "CMS_dataFinal"},
    {ERR_FUNC(CMS_F_CMS_DATAINIT), "CMS_dataInit"},
    {ERR_FUNC(CMS_F_CMS_DECRYPT), "CMS_decrypt"},
    {ERR_FUNC(CMS_F_CMS_DECRYPT_SET1_KEY), "CMS_decrypt_set1_key"},
    {ERR_FUNC(CMS_F_CMS_DECRYPT_SET1_PASSWORD), "CMS_decrypt_set1_password"},
    {ERR_FUNC(CMS_F_CMS_DECRYPT_SET1_PKEY), "CMS_decrypt_set1_pkey"},
    {ERR_FUNC(CMS_F_CMS_DIGESTALGORITHM_FIND_CTX),
     "cms_DigestAlgorithm_find_ctx"},
    {ERR_FUNC(CMS_F_CMS_DIGESTALGORITHM_INIT_BIO),
     "cms_DigestAlgorithm_init_bio"},
    {ERR_FUNC(CMS_F_CMS_DIGESTEDDATA_DO_FINAL), "cms_DigestedData_do_final"},
    {ERR_FUNC(CMS_F_CMS_DIGEST_VERIFY), "CMS_digest_verify"},
    {ERR_FUNC(CMS_F_CMS_ENCODE_RECEIPT), "cms_encode_Receipt"},
    {ERR_FUNC(CMS_F_CMS_ENCRYPT), "CMS_encrypt"},
    {ERR_FUNC(CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO),
     "cms_EncryptedContent_init_bio"},
    {ERR_FUNC(CMS_F_CMS_ENCRYPTEDDATA_DECRYPT), "CMS_EncryptedData_decrypt"},
    {ERR_FUNC(CMS_F_CMS_ENCRYPTEDDATA_ENCRYPT), "CMS_EncryptedData_encrypt"},
    {ERR_FUNC(CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY),
     "CMS_EncryptedData_set1_key"},
    {ERR_FUNC(CMS_F_CMS_ENVELOPEDDATA_CREATE), "CMS_EnvelopedData_create"},
    {ERR_FUNC(CMS_F_CMS_ENVELOPEDDATA_INIT_BIO),
     "cms_EnvelopedData_init_bio"},
    {ERR_FUNC(CMS_F_CMS_ENVELOPED_DATA_INIT), "cms_enveloped_data_init"},
    {ERR_FUNC(CMS_F_CMS_ENV_ASN1_CTRL), "cms_env_asn1_ctrl"},
    {ERR_FUNC(CMS_F_CMS_FINAL), "CMS_final"},
    {ERR_FUNC(CMS_F_CMS_GET0_CERTIFICATE_CHOICES),
     "cms_get0_certificate_choices"},
    {ERR_FUNC(CMS_F_CMS_GET0_CONTENT), "CMS_get0_content"},
    {ERR_FUNC(CMS_F_CMS_GET0_ECONTENT_TYPE), "cms_get0_econtent_type"},
    {ERR_FUNC(CMS_F_CMS_GET0_ENVELOPED), "cms_get0_enveloped"},
    {ERR_FUNC(CMS_F_CMS_GET0_REVOCATION_CHOICES),
     "cms_get0_revocation_choices"},
    {ERR_FUNC(CMS_F_CMS_GET0_SIGNED), "cms_get0_signed"},
    {ERR_FUNC(CMS_F_CMS_MSGSIGDIGEST_ADD1), "cms_msgSigDigest_add1"},
    {ERR_FUNC(CMS_F_CMS_RECEIPTREQUEST_CREATE0),
     "CMS_ReceiptRequest_create0"},
    {ERR_FUNC(CMS_F_CMS_RECEIPT_VERIFY), "cms_Receipt_verify"},
    {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_DECRYPT), "CMS_RecipientInfo_decrypt"},
    {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_ENCRYPT), "CMS_RecipientInfo_encrypt"},
    {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KARI_ENCRYPT),
     "cms_RecipientInfo_kari_encrypt"},
    {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ALG),
     "CMS_RecipientInfo_kari_get0_alg"},
    {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ORIG_ID),
     "CMS_RecipientInfo_kari_get0_orig_id"},
    {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KARI_GET0_REKS),
     "CMS_RecipientInfo_kari_get0_reks"},
    {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KARI_ORIG_ID_CMP),
     "CMS_RecipientInfo_kari_orig_id_cmp"},
    {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT),
     "cms_RecipientInfo_kekri_decrypt"},
    {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT),
     "cms_RecipientInfo_kekri_encrypt"},
    {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KEKRI_GET0_ID),
     "CMS_RecipientInfo_kekri_get0_id"},
    {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KEKRI_ID_CMP),
     "CMS_RecipientInfo_kekri_id_cmp"},
    {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KTRI_CERT_CMP),
     "CMS_RecipientInfo_ktri_cert_cmp"},
    {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KTRI_DECRYPT),
     "cms_RecipientInfo_ktri_decrypt"},
    {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KTRI_ENCRYPT),
     "cms_RecipientInfo_ktri_encrypt"},
    {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_ALGS),
     "CMS_RecipientInfo_ktri_get0_algs"},
    {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_SIGNER_ID),
     "CMS_RecipientInfo_ktri_get0_signer_id"},
    {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_PWRI_CRYPT),
     "cms_RecipientInfo_pwri_crypt"},
    {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_SET0_KEY),
     "CMS_RecipientInfo_set0_key"},
    {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_SET0_PASSWORD),
     "CMS_RecipientInfo_set0_password"},
    {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_SET0_PKEY),
     "CMS_RecipientInfo_set0_pkey"},
    {ERR_FUNC(CMS_F_CMS_SD_ASN1_CTRL), "cms_sd_asn1_ctrl"},
    {ERR_FUNC(CMS_F_CMS_SET1_IAS), "cms_set1_ias"},
    {ERR_FUNC(CMS_F_CMS_SET1_KEYID), "cms_set1_keyid"},
    {ERR_FUNC(CMS_F_CMS_SET1_SIGNERIDENTIFIER), "cms_set1_SignerIdentifier"},
    {ERR_FUNC(CMS_F_CMS_SET_DETACHED), "CMS_set_detached"},
    {ERR_FUNC(CMS_F_CMS_SIGN), "CMS_sign"},
    {ERR_FUNC(CMS_F_CMS_SIGNED_DATA_INIT), "cms_signed_data_init"},
    {ERR_FUNC(CMS_F_CMS_SIGNERINFO_CONTENT_SIGN),
     "cms_SignerInfo_content_sign"},
    {ERR_FUNC(CMS_F_CMS_SIGNERINFO_SIGN), "CMS_SignerInfo_sign"},
    {ERR_FUNC(CMS_F_CMS_SIGNERINFO_VERIFY), "CMS_SignerInfo_verify"},
    {ERR_FUNC(CMS_F_CMS_SIGNERINFO_VERIFY_CERT),
     "cms_signerinfo_verify_cert"},
    {ERR_FUNC(CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT),
     "CMS_SignerInfo_verify_content"},
    {ERR_FUNC(CMS_F_CMS_SIGN_RECEIPT), "CMS_sign_receipt"},
    {ERR_FUNC(CMS_F_CMS_STREAM), "CMS_stream"},
    {ERR_FUNC(CMS_F_CMS_UNCOMPRESS), "CMS_uncompress"},
    {ERR_FUNC(CMS_F_CMS_VERIFY), "CMS_verify"},
    {0, NULL}
};

static ERR_STRING_DATA CMS_str_reasons[] = {
    {ERR_REASON(CMS_R_ADD_SIGNER_ERROR), "add signer error"},
    {ERR_REASON(CMS_R_CERTIFICATE_ALREADY_PRESENT),
     "certificate already present"},
    {ERR_REASON(CMS_R_CERTIFICATE_HAS_NO_KEYID), "certificate has no keyid"},
    {ERR_REASON(CMS_R_CERTIFICATE_VERIFY_ERROR), "certificate verify error"},
    {ERR_REASON(CMS_R_CIPHER_INITIALISATION_ERROR),
     "cipher initialisation error"},
    {ERR_REASON(CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR),
     "cipher parameter initialisation error"},
    {ERR_REASON(CMS_R_CMS_DATAFINAL_ERROR), "cms datafinal error"},
    {ERR_REASON(CMS_R_CMS_LIB), "cms lib"},
    {ERR_REASON(CMS_R_CONTENTIDENTIFIER_MISMATCH),
     "contentidentifier mismatch"},
    {ERR_REASON(CMS_R_CONTENT_NOT_FOUND), "content not found"},
    {ERR_REASON(CMS_R_CONTENT_TYPE_MISMATCH), "content type mismatch"},
    {ERR_REASON(CMS_R_CONTENT_TYPE_NOT_COMPRESSED_DATA),
     "content type not compressed data"},
    {ERR_REASON(CMS_R_CONTENT_TYPE_NOT_ENVELOPED_DATA),
     "content type not enveloped data"},
    {ERR_REASON(CMS_R_CONTENT_TYPE_NOT_SIGNED_DATA),
     "content type not signed data"},
    {ERR_REASON(CMS_R_CONTENT_VERIFY_ERROR), "content verify error"},
    {ERR_REASON(CMS_R_CTRL_ERROR), "ctrl error"},
    {ERR_REASON(CMS_R_CTRL_FAILURE), "ctrl failure"},
    {ERR_REASON(CMS_R_DECRYPT_ERROR), "decrypt error"},
    {ERR_REASON(CMS_R_ERROR_GETTING_PUBLIC_KEY), "error getting public key"},
    {ERR_REASON(CMS_R_ERROR_READING_MESSAGEDIGEST_ATTRIBUTE),
     "error reading messagedigest attribute"},
    {ERR_REASON(CMS_R_ERROR_SETTING_KEY), "error setting key"},
    {ERR_REASON(CMS_R_ERROR_SETTING_RECIPIENTINFO),
     "error setting recipientinfo"},
    {ERR_REASON(CMS_R_INVALID_ENCRYPTED_KEY_LENGTH),
     "invalid encrypted key length"},
    {ERR_REASON(CMS_R_INVALID_KEY_ENCRYPTION_PARAMETER),
     "invalid key encryption parameter"},
    {ERR_REASON(CMS_R_INVALID_KEY_LENGTH), "invalid key length"},
    {ERR_REASON(CMS_R_MD_BIO_INIT_ERROR), "md bio init error"},
    {ERR_REASON(CMS_R_MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH),
     "messagedigest attribute wrong length"},
    {ERR_REASON(CMS_R_MESSAGEDIGEST_WRONG_LENGTH),
     "messagedigest wrong length"},
    {ERR_REASON(CMS_R_MSGSIGDIGEST_ERROR), "msgsigdigest error"},
    {ERR_REASON(CMS_R_MSGSIGDIGEST_VERIFICATION_FAILURE),
     "msgsigdigest verification failure"},
    {ERR_REASON(CMS_R_MSGSIGDIGEST_WRONG_LENGTH),
     "msgsigdigest wrong length"},
    {ERR_REASON(CMS_R_NEED_ONE_SIGNER), "need one signer"},
    {ERR_REASON(CMS_R_NOT_A_SIGNED_RECEIPT), "not a signed receipt"},
    {ERR_REASON(CMS_R_NOT_ENCRYPTED_DATA), "not encrypted data"},
    {ERR_REASON(CMS_R_NOT_KEK), "not kek"},
    {ERR_REASON(CMS_R_NOT_KEY_AGREEMENT), "not key agreement"},
    {ERR_REASON(CMS_R_NOT_KEY_TRANSPORT), "not key transport"},
    {ERR_REASON(CMS_R_NOT_PWRI), "not pwri"},
    {ERR_REASON(CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE),
     "not supported for this key type"},
    {ERR_REASON(CMS_R_NO_CIPHER), "no cipher"},
    {ERR_REASON(CMS_R_NO_CONTENT), "no content"},
    {ERR_REASON(CMS_R_NO_CONTENT_TYPE), "no content type"},
    {ERR_REASON(CMS_R_NO_DEFAULT_DIGEST), "no default digest"},
    {ERR_REASON(CMS_R_NO_DIGEST_SET), "no digest set"},
    {ERR_REASON(CMS_R_NO_KEY), "no key"},
    {ERR_REASON(CMS_R_NO_KEY_OR_CERT), "no key or cert"},
    {ERR_REASON(CMS_R_NO_MATCHING_DIGEST), "no matching digest"},
    {ERR_REASON(CMS_R_NO_MATCHING_RECIPIENT), "no matching recipient"},
    {ERR_REASON(CMS_R_NO_MATCHING_SIGNATURE), "no matching signature"},
    {ERR_REASON(CMS_R_NO_MSGSIGDIGEST), "no msgsigdigest"},
    {ERR_REASON(CMS_R_NO_PASSWORD), "no password"},
    {ERR_REASON(CMS_R_NO_PRIVATE_KEY), "no private key"},
    {ERR_REASON(CMS_R_NO_PUBLIC_KEY), "no public key"},
    {ERR_REASON(CMS_R_NO_RECEIPT_REQUEST), "no receipt request"},
    {ERR_REASON(CMS_R_NO_SIGNERS), "no signers"},
    {ERR_REASON(CMS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE),
     "private key does not match certificate"},
    {ERR_REASON(CMS_R_RECEIPT_DECODE_ERROR), "receipt decode error"},
    {ERR_REASON(CMS_R_RECIPIENT_ERROR), "recipient error"},
    {ERR_REASON(CMS_R_SIGNER_CERTIFICATE_NOT_FOUND),
     "signer certificate not found"},
    {ERR_REASON(CMS_R_SIGNFINAL_ERROR), "signfinal error"},
    {ERR_REASON(CMS_R_SMIME_TEXT_ERROR), "smime text error"},
    {ERR_REASON(CMS_R_STORE_INIT_ERROR), "store init error"},
    {ERR_REASON(CMS_R_TYPE_NOT_COMPRESSED_DATA), "type not compressed data"},
    {ERR_REASON(CMS_R_TYPE_NOT_DATA), "type not data"},
    {ERR_REASON(CMS_R_TYPE_NOT_DIGESTED_DATA), "type not digested data"},
    {ERR_REASON(CMS_R_TYPE_NOT_ENCRYPTED_DATA), "type not encrypted data"},
    {ERR_REASON(CMS_R_TYPE_NOT_ENVELOPED_DATA), "type not enveloped data"},
    {ERR_REASON(CMS_R_UNABLE_TO_FINALIZE_CONTEXT),
     "unable to finalize context"},
    {ERR_REASON(CMS_R_UNKNOWN_CIPHER), "unknown cipher"},
    {ERR_REASON(CMS_R_UNKNOWN_DIGEST_ALGORIHM), "unknown digest algorihm"},
    {ERR_REASON(CMS_R_UNKNOWN_ID), "unknown id"},
    {ERR_REASON(CMS_R_UNSUPPORTED_COMPRESSION_ALGORITHM),
     "unsupported compression algorithm"},
    {ERR_REASON(CMS_R_UNSUPPORTED_CONTENT_TYPE), "unsupported content type"},
    {ERR_REASON(CMS_R_UNSUPPORTED_KEK_ALGORITHM),
     "unsupported kek algorithm"},
    {ERR_REASON(CMS_R_UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM),
     "unsupported key encryption algorithm"},
    {ERR_REASON(CMS_R_UNSUPPORTED_RECIPIENT_TYPE),
     "unsupported recipient type"},
    {ERR_REASON(CMS_R_UNSUPPORTED_RECPIENTINFO_TYPE),
     "unsupported recpientinfo type"},
    {ERR_REASON(CMS_R_UNSUPPORTED_TYPE), "unsupported type"},
    {ERR_REASON(CMS_R_UNWRAP_ERROR), "unwrap error"},
    {ERR_REASON(CMS_R_UNWRAP_FAILURE), "unwrap failure"},
    {ERR_REASON(CMS_R_VERIFICATION_FAILURE), "verification failure"},
    {ERR_REASON(CMS_R_WRAP_ERROR), "wrap error"},
    {0, NULL}
};

#endif

void ERR_load_CMS_strings(void)
{
#ifndef OPENSSL_NO_ERR

    if (ERR_func_error_string(CMS_str_functs[0].error) == NULL) {
        ERR_load_strings(0, CMS_str_functs);
        ERR_load_strings(0, CMS_str_reasons);
    }
#endif
}
