Edit File by line
/home/barbar84/public_h.../wp-conte.../plugins/sujqvwi/ShExBy/shex_roo.../usr/include/openssl
File: pkcs7.h
/*
[0] Fix | Delete
* Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
[1] Fix | Delete
*
[2] Fix | Delete
* Licensed under the OpenSSL license (the "License"). You may not use
[3] Fix | Delete
* this file except in compliance with the License. You can obtain a copy
[4] Fix | Delete
* in the file LICENSE in the source distribution or at
[5] Fix | Delete
* https://www.openssl.org/source/license.html
[6] Fix | Delete
*/
[7] Fix | Delete
[8] Fix | Delete
#ifndef HEADER_PKCS7_H
[9] Fix | Delete
# define HEADER_PKCS7_H
[10] Fix | Delete
[11] Fix | Delete
# include <openssl/asn1.h>
[12] Fix | Delete
# include <openssl/bio.h>
[13] Fix | Delete
# include <openssl/e_os2.h>
[14] Fix | Delete
[15] Fix | Delete
# include <openssl/symhacks.h>
[16] Fix | Delete
# include <openssl/ossl_typ.h>
[17] Fix | Delete
# include <openssl/pkcs7err.h>
[18] Fix | Delete
[19] Fix | Delete
#ifdef __cplusplus
[20] Fix | Delete
extern "C" {
[21] Fix | Delete
#endif
[22] Fix | Delete
[23] Fix | Delete
/*-
[24] Fix | Delete
Encryption_ID DES-CBC
[25] Fix | Delete
Digest_ID MD5
[26] Fix | Delete
Digest_Encryption_ID rsaEncryption
[27] Fix | Delete
Key_Encryption_ID rsaEncryption
[28] Fix | Delete
*/
[29] Fix | Delete
[30] Fix | Delete
typedef struct pkcs7_issuer_and_serial_st {
[31] Fix | Delete
X509_NAME *issuer;
[32] Fix | Delete
ASN1_INTEGER *serial;
[33] Fix | Delete
} PKCS7_ISSUER_AND_SERIAL;
[34] Fix | Delete
[35] Fix | Delete
typedef struct pkcs7_signer_info_st {
[36] Fix | Delete
ASN1_INTEGER *version; /* version 1 */
[37] Fix | Delete
PKCS7_ISSUER_AND_SERIAL *issuer_and_serial;
[38] Fix | Delete
X509_ALGOR *digest_alg;
[39] Fix | Delete
STACK_OF(X509_ATTRIBUTE) *auth_attr; /* [ 0 ] */
[40] Fix | Delete
X509_ALGOR *digest_enc_alg;
[41] Fix | Delete
ASN1_OCTET_STRING *enc_digest;
[42] Fix | Delete
STACK_OF(X509_ATTRIBUTE) *unauth_attr; /* [ 1 ] */
[43] Fix | Delete
/* The private key to sign with */
[44] Fix | Delete
EVP_PKEY *pkey;
[45] Fix | Delete
} PKCS7_SIGNER_INFO;
[46] Fix | Delete
[47] Fix | Delete
DEFINE_STACK_OF(PKCS7_SIGNER_INFO)
[48] Fix | Delete
[49] Fix | Delete
typedef struct pkcs7_recip_info_st {
[50] Fix | Delete
ASN1_INTEGER *version; /* version 0 */
[51] Fix | Delete
PKCS7_ISSUER_AND_SERIAL *issuer_and_serial;
[52] Fix | Delete
X509_ALGOR *key_enc_algor;
[53] Fix | Delete
ASN1_OCTET_STRING *enc_key;
[54] Fix | Delete
X509 *cert; /* get the pub-key from this */
[55] Fix | Delete
} PKCS7_RECIP_INFO;
[56] Fix | Delete
[57] Fix | Delete
DEFINE_STACK_OF(PKCS7_RECIP_INFO)
[58] Fix | Delete
[59] Fix | Delete
typedef struct pkcs7_signed_st {
[60] Fix | Delete
ASN1_INTEGER *version; /* version 1 */
[61] Fix | Delete
STACK_OF(X509_ALGOR) *md_algs; /* md used */
[62] Fix | Delete
STACK_OF(X509) *cert; /* [ 0 ] */
[63] Fix | Delete
STACK_OF(X509_CRL) *crl; /* [ 1 ] */
[64] Fix | Delete
STACK_OF(PKCS7_SIGNER_INFO) *signer_info;
[65] Fix | Delete
struct pkcs7_st *contents;
[66] Fix | Delete
} PKCS7_SIGNED;
[67] Fix | Delete
/*
[68] Fix | Delete
* The above structure is very very similar to PKCS7_SIGN_ENVELOPE. How about
[69] Fix | Delete
* merging the two
[70] Fix | Delete
*/
[71] Fix | Delete
[72] Fix | Delete
typedef struct pkcs7_enc_content_st {
[73] Fix | Delete
ASN1_OBJECT *content_type;
[74] Fix | Delete
X509_ALGOR *algorithm;
[75] Fix | Delete
ASN1_OCTET_STRING *enc_data; /* [ 0 ] */
[76] Fix | Delete
const EVP_CIPHER *cipher;
[77] Fix | Delete
} PKCS7_ENC_CONTENT;
[78] Fix | Delete
[79] Fix | Delete
typedef struct pkcs7_enveloped_st {
[80] Fix | Delete
ASN1_INTEGER *version; /* version 0 */
[81] Fix | Delete
STACK_OF(PKCS7_RECIP_INFO) *recipientinfo;
[82] Fix | Delete
PKCS7_ENC_CONTENT *enc_data;
[83] Fix | Delete
} PKCS7_ENVELOPE;
[84] Fix | Delete
[85] Fix | Delete
typedef struct pkcs7_signedandenveloped_st {
[86] Fix | Delete
ASN1_INTEGER *version; /* version 1 */
[87] Fix | Delete
STACK_OF(X509_ALGOR) *md_algs; /* md used */
[88] Fix | Delete
STACK_OF(X509) *cert; /* [ 0 ] */
[89] Fix | Delete
STACK_OF(X509_CRL) *crl; /* [ 1 ] */
[90] Fix | Delete
STACK_OF(PKCS7_SIGNER_INFO) *signer_info;
[91] Fix | Delete
PKCS7_ENC_CONTENT *enc_data;
[92] Fix | Delete
STACK_OF(PKCS7_RECIP_INFO) *recipientinfo;
[93] Fix | Delete
} PKCS7_SIGN_ENVELOPE;
[94] Fix | Delete
[95] Fix | Delete
typedef struct pkcs7_digest_st {
[96] Fix | Delete
ASN1_INTEGER *version; /* version 0 */
[97] Fix | Delete
X509_ALGOR *md; /* md used */
[98] Fix | Delete
struct pkcs7_st *contents;
[99] Fix | Delete
ASN1_OCTET_STRING *digest;
[100] Fix | Delete
} PKCS7_DIGEST;
[101] Fix | Delete
[102] Fix | Delete
typedef struct pkcs7_encrypted_st {
[103] Fix | Delete
ASN1_INTEGER *version; /* version 0 */
[104] Fix | Delete
PKCS7_ENC_CONTENT *enc_data;
[105] Fix | Delete
} PKCS7_ENCRYPT;
[106] Fix | Delete
[107] Fix | Delete
typedef struct pkcs7_st {
[108] Fix | Delete
/*
[109] Fix | Delete
* The following is non NULL if it contains ASN1 encoding of this
[110] Fix | Delete
* structure
[111] Fix | Delete
*/
[112] Fix | Delete
unsigned char *asn1;
[113] Fix | Delete
long length;
[114] Fix | Delete
# define PKCS7_S_HEADER 0
[115] Fix | Delete
# define PKCS7_S_BODY 1
[116] Fix | Delete
# define PKCS7_S_TAIL 2
[117] Fix | Delete
int state; /* used during processing */
[118] Fix | Delete
int detached;
[119] Fix | Delete
ASN1_OBJECT *type;
[120] Fix | Delete
/* content as defined by the type */
[121] Fix | Delete
/*
[122] Fix | Delete
* all encryption/message digests are applied to the 'contents', leaving
[123] Fix | Delete
* out the 'type' field.
[124] Fix | Delete
*/
[125] Fix | Delete
union {
[126] Fix | Delete
char *ptr;
[127] Fix | Delete
/* NID_pkcs7_data */
[128] Fix | Delete
ASN1_OCTET_STRING *data;
[129] Fix | Delete
/* NID_pkcs7_signed */
[130] Fix | Delete
PKCS7_SIGNED *sign;
[131] Fix | Delete
/* NID_pkcs7_enveloped */
[132] Fix | Delete
PKCS7_ENVELOPE *enveloped;
[133] Fix | Delete
/* NID_pkcs7_signedAndEnveloped */
[134] Fix | Delete
PKCS7_SIGN_ENVELOPE *signed_and_enveloped;
[135] Fix | Delete
/* NID_pkcs7_digest */
[136] Fix | Delete
PKCS7_DIGEST *digest;
[137] Fix | Delete
/* NID_pkcs7_encrypted */
[138] Fix | Delete
PKCS7_ENCRYPT *encrypted;
[139] Fix | Delete
/* Anything else */
[140] Fix | Delete
ASN1_TYPE *other;
[141] Fix | Delete
} d;
[142] Fix | Delete
} PKCS7;
[143] Fix | Delete
[144] Fix | Delete
DEFINE_STACK_OF(PKCS7)
[145] Fix | Delete
[146] Fix | Delete
# define PKCS7_OP_SET_DETACHED_SIGNATURE 1
[147] Fix | Delete
# define PKCS7_OP_GET_DETACHED_SIGNATURE 2
[148] Fix | Delete
[149] Fix | Delete
# define PKCS7_get_signed_attributes(si) ((si)->auth_attr)
[150] Fix | Delete
# define PKCS7_get_attributes(si) ((si)->unauth_attr)
[151] Fix | Delete
[152] Fix | Delete
# define PKCS7_type_is_signed(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_signed)
[153] Fix | Delete
# define PKCS7_type_is_encrypted(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_encrypted)
[154] Fix | Delete
# define PKCS7_type_is_enveloped(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_enveloped)
[155] Fix | Delete
# define PKCS7_type_is_signedAndEnveloped(a) \
[156] Fix | Delete
(OBJ_obj2nid((a)->type) == NID_pkcs7_signedAndEnveloped)
[157] Fix | Delete
# define PKCS7_type_is_data(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_data)
[158] Fix | Delete
# define PKCS7_type_is_digest(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_digest)
[159] Fix | Delete
[160] Fix | Delete
# define PKCS7_set_detached(p,v) \
[161] Fix | Delete
PKCS7_ctrl(p,PKCS7_OP_SET_DETACHED_SIGNATURE,v,NULL)
[162] Fix | Delete
# define PKCS7_get_detached(p) \
[163] Fix | Delete
PKCS7_ctrl(p,PKCS7_OP_GET_DETACHED_SIGNATURE,0,NULL)
[164] Fix | Delete
[165] Fix | Delete
# define PKCS7_is_detached(p7) (PKCS7_type_is_signed(p7) && PKCS7_get_detached(p7))
[166] Fix | Delete
[167] Fix | Delete
/* S/MIME related flags */
[168] Fix | Delete
[169] Fix | Delete
# define PKCS7_TEXT 0x1
[170] Fix | Delete
# define PKCS7_NOCERTS 0x2
[171] Fix | Delete
# define PKCS7_NOSIGS 0x4
[172] Fix | Delete
# define PKCS7_NOCHAIN 0x8
[173] Fix | Delete
# define PKCS7_NOINTERN 0x10
[174] Fix | Delete
# define PKCS7_NOVERIFY 0x20
[175] Fix | Delete
# define PKCS7_DETACHED 0x40
[176] Fix | Delete
# define PKCS7_BINARY 0x80
[177] Fix | Delete
# define PKCS7_NOATTR 0x100
[178] Fix | Delete
# define PKCS7_NOSMIMECAP 0x200
[179] Fix | Delete
# define PKCS7_NOOLDMIMETYPE 0x400
[180] Fix | Delete
# define PKCS7_CRLFEOL 0x800
[181] Fix | Delete
# define PKCS7_STREAM 0x1000
[182] Fix | Delete
# define PKCS7_NOCRL 0x2000
[183] Fix | Delete
# define PKCS7_PARTIAL 0x4000
[184] Fix | Delete
# define PKCS7_REUSE_DIGEST 0x8000
[185] Fix | Delete
# define PKCS7_NO_DUAL_CONTENT 0x10000
[186] Fix | Delete
[187] Fix | Delete
/* Flags: for compatibility with older code */
[188] Fix | Delete
[189] Fix | Delete
# define SMIME_TEXT PKCS7_TEXT
[190] Fix | Delete
# define SMIME_NOCERTS PKCS7_NOCERTS
[191] Fix | Delete
# define SMIME_NOSIGS PKCS7_NOSIGS
[192] Fix | Delete
# define SMIME_NOCHAIN PKCS7_NOCHAIN
[193] Fix | Delete
# define SMIME_NOINTERN PKCS7_NOINTERN
[194] Fix | Delete
# define SMIME_NOVERIFY PKCS7_NOVERIFY
[195] Fix | Delete
# define SMIME_DETACHED PKCS7_DETACHED
[196] Fix | Delete
# define SMIME_BINARY PKCS7_BINARY
[197] Fix | Delete
# define SMIME_NOATTR PKCS7_NOATTR
[198] Fix | Delete
[199] Fix | Delete
/* CRLF ASCII canonicalisation */
[200] Fix | Delete
# define SMIME_ASCIICRLF 0x80000
[201] Fix | Delete
[202] Fix | Delete
DECLARE_ASN1_FUNCTIONS(PKCS7_ISSUER_AND_SERIAL)
[203] Fix | Delete
[204] Fix | Delete
int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data,
[205] Fix | Delete
const EVP_MD *type, unsigned char *md,
[206] Fix | Delete
unsigned int *len);
[207] Fix | Delete
# ifndef OPENSSL_NO_STDIO
[208] Fix | Delete
PKCS7 *d2i_PKCS7_fp(FILE *fp, PKCS7 **p7);
[209] Fix | Delete
int i2d_PKCS7_fp(FILE *fp, PKCS7 *p7);
[210] Fix | Delete
# endif
[211] Fix | Delete
PKCS7 *PKCS7_dup(PKCS7 *p7);
[212] Fix | Delete
PKCS7 *d2i_PKCS7_bio(BIO *bp, PKCS7 **p7);
[213] Fix | Delete
int i2d_PKCS7_bio(BIO *bp, PKCS7 *p7);
[214] Fix | Delete
int i2d_PKCS7_bio_stream(BIO *out, PKCS7 *p7, BIO *in, int flags);
[215] Fix | Delete
int PEM_write_bio_PKCS7_stream(BIO *out, PKCS7 *p7, BIO *in, int flags);
[216] Fix | Delete
[217] Fix | Delete
DECLARE_ASN1_FUNCTIONS(PKCS7_SIGNER_INFO)
[218] Fix | Delete
DECLARE_ASN1_FUNCTIONS(PKCS7_RECIP_INFO)
[219] Fix | Delete
DECLARE_ASN1_FUNCTIONS(PKCS7_SIGNED)
[220] Fix | Delete
DECLARE_ASN1_FUNCTIONS(PKCS7_ENC_CONTENT)
[221] Fix | Delete
DECLARE_ASN1_FUNCTIONS(PKCS7_ENVELOPE)
[222] Fix | Delete
DECLARE_ASN1_FUNCTIONS(PKCS7_SIGN_ENVELOPE)
[223] Fix | Delete
DECLARE_ASN1_FUNCTIONS(PKCS7_DIGEST)
[224] Fix | Delete
DECLARE_ASN1_FUNCTIONS(PKCS7_ENCRYPT)
[225] Fix | Delete
DECLARE_ASN1_FUNCTIONS(PKCS7)
[226] Fix | Delete
[227] Fix | Delete
DECLARE_ASN1_ITEM(PKCS7_ATTR_SIGN)
[228] Fix | Delete
DECLARE_ASN1_ITEM(PKCS7_ATTR_VERIFY)
[229] Fix | Delete
[230] Fix | Delete
DECLARE_ASN1_NDEF_FUNCTION(PKCS7)
[231] Fix | Delete
DECLARE_ASN1_PRINT_FUNCTION(PKCS7)
[232] Fix | Delete
[233] Fix | Delete
long PKCS7_ctrl(PKCS7 *p7, int cmd, long larg, char *parg);
[234] Fix | Delete
[235] Fix | Delete
int PKCS7_set_type(PKCS7 *p7, int type);
[236] Fix | Delete
int PKCS7_set0_type_other(PKCS7 *p7, int type, ASN1_TYPE *other);
[237] Fix | Delete
int PKCS7_set_content(PKCS7 *p7, PKCS7 *p7_data);
[238] Fix | Delete
int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey,
[239] Fix | Delete
const EVP_MD *dgst);
[240] Fix | Delete
int PKCS7_SIGNER_INFO_sign(PKCS7_SIGNER_INFO *si);
[241] Fix | Delete
int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *p7i);
[242] Fix | Delete
int PKCS7_add_certificate(PKCS7 *p7, X509 *x509);
[243] Fix | Delete
int PKCS7_add_crl(PKCS7 *p7, X509_CRL *x509);
[244] Fix | Delete
int PKCS7_content_new(PKCS7 *p7, int nid);
[245] Fix | Delete
int PKCS7_dataVerify(X509_STORE *cert_store, X509_STORE_CTX *ctx,
[246] Fix | Delete
BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si);
[247] Fix | Delete
int PKCS7_signatureVerify(BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si,
[248] Fix | Delete
X509 *x509);
[249] Fix | Delete
[250] Fix | Delete
BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio);
[251] Fix | Delete
int PKCS7_dataFinal(PKCS7 *p7, BIO *bio);
[252] Fix | Delete
BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert);
[253] Fix | Delete
[254] Fix | Delete
PKCS7_SIGNER_INFO *PKCS7_add_signature(PKCS7 *p7, X509 *x509,
[255] Fix | Delete
EVP_PKEY *pkey, const EVP_MD *dgst);
[256] Fix | Delete
X509 *PKCS7_cert_from_signer_info(PKCS7 *p7, PKCS7_SIGNER_INFO *si);
[257] Fix | Delete
int PKCS7_set_digest(PKCS7 *p7, const EVP_MD *md);
[258] Fix | Delete
STACK_OF(PKCS7_SIGNER_INFO) *PKCS7_get_signer_info(PKCS7 *p7);
[259] Fix | Delete
[260] Fix | Delete
PKCS7_RECIP_INFO *PKCS7_add_recipient(PKCS7 *p7, X509 *x509);
[261] Fix | Delete
void PKCS7_SIGNER_INFO_get0_algs(PKCS7_SIGNER_INFO *si, EVP_PKEY **pk,
[262] Fix | Delete
X509_ALGOR **pdig, X509_ALGOR **psig);
[263] Fix | Delete
void PKCS7_RECIP_INFO_get0_alg(PKCS7_RECIP_INFO *ri, X509_ALGOR **penc);
[264] Fix | Delete
int PKCS7_add_recipient_info(PKCS7 *p7, PKCS7_RECIP_INFO *ri);
[265] Fix | Delete
int PKCS7_RECIP_INFO_set(PKCS7_RECIP_INFO *p7i, X509 *x509);
[266] Fix | Delete
int PKCS7_set_cipher(PKCS7 *p7, const EVP_CIPHER *cipher);
[267] Fix | Delete
int PKCS7_stream(unsigned char ***boundary, PKCS7 *p7);
[268] Fix | Delete
[269] Fix | Delete
PKCS7_ISSUER_AND_SERIAL *PKCS7_get_issuer_and_serial(PKCS7 *p7, int idx);
[270] Fix | Delete
ASN1_OCTET_STRING *PKCS7_digest_from_attributes(STACK_OF(X509_ATTRIBUTE) *sk);
[271] Fix | Delete
int PKCS7_add_signed_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int type,
[272] Fix | Delete
void *data);
[273] Fix | Delete
int PKCS7_add_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int atrtype,
[274] Fix | Delete
void *value);
[275] Fix | Delete
ASN1_TYPE *PKCS7_get_attribute(PKCS7_SIGNER_INFO *si, int nid);
[276] Fix | Delete
ASN1_TYPE *PKCS7_get_signed_attribute(PKCS7_SIGNER_INFO *si, int nid);
[277] Fix | Delete
int PKCS7_set_signed_attributes(PKCS7_SIGNER_INFO *p7si,
[278] Fix | Delete
STACK_OF(X509_ATTRIBUTE) *sk);
[279] Fix | Delete
int PKCS7_set_attributes(PKCS7_SIGNER_INFO *p7si,
[280] Fix | Delete
STACK_OF(X509_ATTRIBUTE) *sk);
[281] Fix | Delete
[282] Fix | Delete
PKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs,
[283] Fix | Delete
BIO *data, int flags);
[284] Fix | Delete
[285] Fix | Delete
PKCS7_SIGNER_INFO *PKCS7_sign_add_signer(PKCS7 *p7,
[286] Fix | Delete
X509 *signcert, EVP_PKEY *pkey,
[287] Fix | Delete
const EVP_MD *md, int flags);
[288] Fix | Delete
[289] Fix | Delete
int PKCS7_final(PKCS7 *p7, BIO *data, int flags);
[290] Fix | Delete
int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store,
[291] Fix | Delete
BIO *indata, BIO *out, int flags);
[292] Fix | Delete
STACK_OF(X509) *PKCS7_get0_signers(PKCS7 *p7, STACK_OF(X509) *certs,
[293] Fix | Delete
int flags);
[294] Fix | Delete
PKCS7 *PKCS7_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher,
[295] Fix | Delete
int flags);
[296] Fix | Delete
int PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data,
[297] Fix | Delete
int flags);
[298] Fix | Delete
[299] Fix | Delete
int PKCS7_add_attrib_smimecap(PKCS7_SIGNER_INFO *si,
[300] Fix | Delete
STACK_OF(X509_ALGOR) *cap);
[301] Fix | Delete
STACK_OF(X509_ALGOR) *PKCS7_get_smimecap(PKCS7_SIGNER_INFO *si);
[302] Fix | Delete
int PKCS7_simple_smimecap(STACK_OF(X509_ALGOR) *sk, int nid, int arg);
[303] Fix | Delete
[304] Fix | Delete
int PKCS7_add_attrib_content_type(PKCS7_SIGNER_INFO *si, ASN1_OBJECT *coid);
[305] Fix | Delete
int PKCS7_add0_attrib_signing_time(PKCS7_SIGNER_INFO *si, ASN1_TIME *t);
[306] Fix | Delete
int PKCS7_add1_attrib_digest(PKCS7_SIGNER_INFO *si,
[307] Fix | Delete
const unsigned char *md, int mdlen);
[308] Fix | Delete
[309] Fix | Delete
int SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags);
[310] Fix | Delete
PKCS7 *SMIME_read_PKCS7(BIO *bio, BIO **bcont);
[311] Fix | Delete
[312] Fix | Delete
BIO *BIO_new_PKCS7(BIO *out, PKCS7 *p7);
[313] Fix | Delete
[314] Fix | Delete
# ifdef __cplusplus
[315] Fix | Delete
}
[316] Fix | Delete
# endif
[317] Fix | Delete
#endif
[318] Fix | Delete
[319] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function