62 # include <openssl/e_os2.h>
63 # ifndef OPENSSL_NO_BIO
64 # include <openssl/bio.h>
66 # ifndef OPENSSL_NO_STACK
67 # include <openssl/stack.h>
69 # include <openssl/evp.h>
70 # include <openssl/x509.h>
71 # include <openssl/pem2.h>
77 # define PEM_BUFSIZE 1024
79 # define PEM_OBJ_UNDEF 0
80 # define PEM_OBJ_X509 1
81 # define PEM_OBJ_X509_REQ 2
82 # define PEM_OBJ_CRL 3
83 # define PEM_OBJ_SSL_SESSION 4
84 # define PEM_OBJ_PRIV_KEY 10
85 # define PEM_OBJ_PRIV_RSA 11
86 # define PEM_OBJ_PRIV_DSA 12
87 # define PEM_OBJ_PRIV_DH 13
88 # define PEM_OBJ_PUB_RSA 14
89 # define PEM_OBJ_PUB_DSA 15
90 # define PEM_OBJ_PUB_DH 16
91 # define PEM_OBJ_DHPARAMS 17
92 # define PEM_OBJ_DSAPARAMS 18
93 # define PEM_OBJ_PRIV_RSA_PUBLIC 19
94 # define PEM_OBJ_PRIV_ECDSA 20
95 # define PEM_OBJ_PUB_ECDSA 21
96 # define PEM_OBJ_ECPARAMETERS 22
99 # define PEM_DEK_DES_CBC 40
100 # define PEM_DEK_IDEA_CBC 45
101 # define PEM_DEK_DES_EDE 50
102 # define PEM_DEK_DES_ECB 60
103 # define PEM_DEK_RSA 70
104 # define PEM_DEK_RSA_MD2 80
105 # define PEM_DEK_RSA_MD5 90
107 # define PEM_MD_MD2 NID_md2
108 # define PEM_MD_MD5 NID_md5
109 # define PEM_MD_SHA NID_sha
110 # define PEM_MD_MD2_RSA NID_md2WithRSAEncryption
111 # define PEM_MD_MD5_RSA NID_md5WithRSAEncryption
112 # define PEM_MD_SHA_RSA NID_sha1WithRSAEncryption
114 # define PEM_STRING_X509_OLD "X509 CERTIFICATE"
115 # define PEM_STRING_X509 "CERTIFICATE"
116 # define PEM_STRING_X509_PAIR "CERTIFICATE PAIR"
117 # define PEM_STRING_X509_TRUSTED "TRUSTED CERTIFICATE"
118 # define PEM_STRING_X509_REQ_OLD "NEW CERTIFICATE REQUEST"
119 # define PEM_STRING_X509_REQ "CERTIFICATE REQUEST"
120 # define PEM_STRING_X509_CRL "X509 CRL"
121 # define PEM_STRING_EVP_PKEY "ANY PRIVATE KEY"
122 # define PEM_STRING_PUBLIC "PUBLIC KEY"
123 # define PEM_STRING_RSA "RSA PRIVATE KEY"
124 # define PEM_STRING_RSA_PUBLIC "RSA PUBLIC KEY"
125 # define PEM_STRING_DSA "DSA PRIVATE KEY"
126 # define PEM_STRING_DSA_PUBLIC "DSA PUBLIC KEY"
127 # define PEM_STRING_PKCS7 "PKCS7"
128 # define PEM_STRING_PKCS7_SIGNED "PKCS #7 SIGNED DATA"
129 # define PEM_STRING_PKCS8 "ENCRYPTED PRIVATE KEY"
130 # define PEM_STRING_PKCS8INF "PRIVATE KEY"
131 # define PEM_STRING_DHPARAMS "DH PARAMETERS"
132 # define PEM_STRING_DHXPARAMS "X9.42 DH PARAMETERS"
133 # define PEM_STRING_SSL_SESSION "SSL SESSION PARAMETERS"
134 # define PEM_STRING_DSAPARAMS "DSA PARAMETERS"
135 # define PEM_STRING_ECDSA_PUBLIC "ECDSA PUBLIC KEY"
136 # define PEM_STRING_ECPARAMETERS "EC PARAMETERS"
137 # define PEM_STRING_ECPRIVATEKEY "EC PRIVATE KEY"
138 # define PEM_STRING_PARAMETERS "PARAMETERS"
139 # define PEM_STRING_CMS "CMS"
152 # define PEM_TYPE_ENCRYPTED 10
153 # define PEM_TYPE_MIC_ONLY 20
154 # define PEM_TYPE_MIC_CLEAR 30
155 # define PEM_TYPE_CLEAR 40
212 # ifdef OPENSSL_NO_FP_API
214 # define IMPLEMENT_PEM_read_fp(name, type, str, asn1)
215 # define IMPLEMENT_PEM_write_fp(name, type, str, asn1)
216 # define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1)
217 # define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1)
218 # define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1)
221 # define IMPLEMENT_PEM_read_fp(name, type, str, asn1) \
222 type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u)\
224 return PEM_ASN1_read((d2i_of_void *)d2i_##asn1, str,fp,(void **)x,cb,u); \
227 # define IMPLEMENT_PEM_write_fp(name, type, str, asn1) \
228 int PEM_write_##name(FILE *fp, type *x) \
230 return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,NULL,NULL,0,NULL,NULL); \
233 # define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) \
234 int PEM_write_##name(FILE *fp, const type *x) \
236 return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,(void *)x,NULL,NULL,0,NULL,NULL); \
239 # define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) \
240 int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \
241 unsigned char *kstr, int klen, pem_password_cb *cb, \
244 return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,enc,kstr,klen,cb,u); \
247 # define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) \
248 int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \
249 unsigned char *kstr, int klen, pem_password_cb *cb, \
252 return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,enc,kstr,klen,cb,u); \
257 # define IMPLEMENT_PEM_read_bio(name, type, str, asn1) \
258 type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u)\
260 return PEM_ASN1_read_bio((d2i_of_void *)d2i_##asn1, str,bp,(void **)x,cb,u); \
263 # define IMPLEMENT_PEM_write_bio(name, type, str, asn1) \
264 int PEM_write_bio_##name(BIO *bp, type *x) \
266 return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,NULL,NULL,0,NULL,NULL); \
269 # define IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \
270 int PEM_write_bio_##name(BIO *bp, const type *x) \
272 return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,NULL,NULL,0,NULL,NULL); \
275 # define IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \
276 int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \
277 unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \
279 return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,enc,kstr,klen,cb,u); \
282 # define IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \
283 int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \
284 unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \
286 return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,enc,kstr,klen,cb,u); \
289 # define IMPLEMENT_PEM_write(name, type, str, asn1) \
290 IMPLEMENT_PEM_write_bio(name, type, str, asn1) \
291 IMPLEMENT_PEM_write_fp(name, type, str, asn1)
293 # define IMPLEMENT_PEM_write_const(name, type, str, asn1) \
294 IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \
295 IMPLEMENT_PEM_write_fp_const(name, type, str, asn1)
297 # define IMPLEMENT_PEM_write_cb(name, type, str, asn1) \
298 IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \
299 IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1)
301 # define IMPLEMENT_PEM_write_cb_const(name, type, str, asn1) \
302 IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \
303 IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1)
305 # define IMPLEMENT_PEM_read(name, type, str, asn1) \
306 IMPLEMENT_PEM_read_bio(name, type, str, asn1) \
307 IMPLEMENT_PEM_read_fp(name, type, str, asn1)
309 # define IMPLEMENT_PEM_rw(name, type, str, asn1) \
310 IMPLEMENT_PEM_read(name, type, str, asn1) \
311 IMPLEMENT_PEM_write(name, type, str, asn1)
313 # define IMPLEMENT_PEM_rw_const(name, type, str, asn1) \
314 IMPLEMENT_PEM_read(name, type, str, asn1) \
315 IMPLEMENT_PEM_write_const(name, type, str, asn1)
317 # define IMPLEMENT_PEM_rw_cb(name, type, str, asn1) \
318 IMPLEMENT_PEM_read(name, type, str, asn1) \
319 IMPLEMENT_PEM_write_cb(name, type, str, asn1)
323 # if defined(OPENSSL_NO_FP_API)
325 # define DECLARE_PEM_read_fp(name, type)
326 # define DECLARE_PEM_write_fp(name, type)
327 # define DECLARE_PEM_write_cb_fp(name, type)
330 # define DECLARE_PEM_read_fp(name, type) \
331 type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u);
333 # define DECLARE_PEM_write_fp(name, type) \
334 int PEM_write_##name(FILE *fp, type *x);
336 # define DECLARE_PEM_write_fp_const(name, type) \
337 int PEM_write_##name(FILE *fp, const type *x);
339 # define DECLARE_PEM_write_cb_fp(name, type) \
340 int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \
341 unsigned char *kstr, int klen, pem_password_cb *cb, void *u);
345 # ifndef OPENSSL_NO_BIO
346 # define DECLARE_PEM_read_bio(name, type) \
347 type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u);
349 # define DECLARE_PEM_write_bio(name, type) \
350 int PEM_write_bio_##name(BIO *bp, type *x);
352 # define DECLARE_PEM_write_bio_const(name, type) \
353 int PEM_write_bio_##name(BIO *bp, const type *x);
355 # define DECLARE_PEM_write_cb_bio(name, type) \
356 int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \
357 unsigned char *kstr, int klen, pem_password_cb *cb, void *u);
361 # define DECLARE_PEM_read_bio(name, type)
362 # define DECLARE_PEM_write_bio(name, type)
363 # define DECLARE_PEM_write_bio_const(name, type)
364 # define DECLARE_PEM_write_cb_bio(name, type)
366 # define DECLARE_PEM_write(name, type) \
367 DECLARE_PEM_write_bio(name, type) \
368 DECLARE_PEM_write_fp(name, type)
369 # define DECLARE_PEM_write_const(name, type) \
370 DECLARE_PEM_write_bio_const(name, type) \
371 DECLARE_PEM_write_fp_const(name, type)
372 # define DECLARE_PEM_write_cb(name, type) \
373 DECLARE_PEM_write_cb_bio(name, type) \
374 DECLARE_PEM_write_cb_fp(name, type)
375 # define DECLARE_PEM_read(name, type) \
376 DECLARE_PEM_read_bio(name, type) \
377 DECLARE_PEM_read_fp(name, type)
378 # define DECLARE_PEM_rw(name, type) \
379 DECLARE_PEM_read(name, type) \
380 DECLARE_PEM_write(name, type)
381 # define DECLARE_PEM_rw_const(name, type) \
382 DECLARE_PEM_read(name, type) \
383 DECLARE_PEM_write_const(name, type)
384 # define DECLARE_PEM_rw_cb(name, type) \
385 DECLARE_PEM_read(name, type) \
386 DECLARE_PEM_write_cb(name, type)
389 typedef int pem_password_cb (
char *buf,
int size,
int rwflag,
void *userdata);
392 typedef int pem_password_cb (
char *buf,
int size,
int rwflag);
396 int PEM_do_header(
EVP_CIPHER_INFO *cipher,
unsigned char *data,
long *len,
397 pem_password_cb *callback,
void *u);
399 # ifndef OPENSSL_NO_BIO
400 int PEM_read_bio(
BIO *bp,
char **name,
char **header,
401 unsigned char **data,
long *len);
402 int PEM_write_bio(
BIO *bp,
const char *name,
const char *hdr,
403 const unsigned char *data,
long len);
404 int PEM_bytes_read_bio(
unsigned char **pdata,
long *plen,
char **pnm,
405 const char *name,
BIO *bp, pem_password_cb *cb,
407 void *PEM_ASN1_read_bio(d2i_of_void *d2i,
const char *name,
BIO *bp,
void **x,
408 pem_password_cb *cb,
void *u);
409 int PEM_ASN1_write_bio(i2d_of_void *i2d,
const char *name,
BIO *bp,
void *x,
410 const EVP_CIPHER *enc,
unsigned char *kstr,
int klen,
411 pem_password_cb *cb,
void *u);
414 pem_password_cb *cb,
void *u);
416 unsigned char *kstr,
int klen,
417 pem_password_cb *cd,
void *u);
420 int PEM_read(FILE *fp,
char **name,
char **header,
421 unsigned char **data,
long *len);
422 int PEM_write(FILE *fp,
const char *name,
const char *hdr,
423 const unsigned char *data,
long len);
424 void *PEM_ASN1_read(d2i_of_void *d2i,
const char *name, FILE *fp,
void **x,
425 pem_password_cb *cb,
void *u);
426 int PEM_ASN1_write(i2d_of_void *i2d,
const char *name, FILE *fp,
427 void *x,
const EVP_CIPHER *enc,
unsigned char *kstr,
428 int klen, pem_password_cb *callback,
void *u);
430 pem_password_cb *cb,
void *u);
433 EVP_MD *md_type,
unsigned char **ek,
int *ekl,
434 unsigned char *iv,
EVP_PKEY **pubk,
int npubk);
436 unsigned char *in,
int inl);
438 unsigned char *out,
int *outl,
EVP_PKEY *priv);
441 void PEM_SignUpdate(
EVP_MD_CTX *ctx,
unsigned char *d,
unsigned int cnt);
442 int PEM_SignFinal(
EVP_MD_CTX *ctx,
unsigned char *sigret,
443 unsigned int *siglen,
EVP_PKEY *pkey);
446 int PEM_def_callback(
char *buf,
int num,
int rwflag,
void *userdata);
447 void PEM_proc_type(
char *buf,
int type);
448 void PEM_dek_info(
char *buf,
const char *type,
int len,
char *str);
450 # include <openssl/symhacks.h>
453 DECLARE_PEM_rw(X509_AUX,
X509)
456 DECLARE_PEM_write(X509_REQ_NEW, X509_REQ)
458 DECLARE_PEM_rw(
PKCS7, PKCS7)
462 # ifndef OPENSSL_NO_RSA
463 DECLARE_PEM_rw_cb(RSAPrivateKey,
RSA)
464 DECLARE_PEM_rw_const(RSAPublicKey,
RSA)
465 DECLARE_PEM_rw(RSA_PUBKEY,
RSA)
467 # ifndef OPENSSL_NO_DSA
468 DECLARE_PEM_rw_cb(DSAPrivateKey,
DSA)
469 DECLARE_PEM_rw(DSA_PUBKEY,
DSA)
470 DECLARE_PEM_rw_const(DSAparams,
DSA)
472 # ifndef OPENSSL_NO_EC
473 DECLARE_PEM_rw_const(ECPKParameters, EC_GROUP)
474 DECLARE_PEM_rw_cb(ECPrivateKey, EC_KEY)
475 DECLARE_PEM_rw(EC_PUBKEY, EC_KEY)
477 # ifndef OPENSSL_NO_DH
478 DECLARE_PEM_rw_const(DHparams,
DH)
479 DECLARE_PEM_write_const(DHxparams,
DH)
481 DECLARE_PEM_rw_cb(PrivateKey,
EVP_PKEY)
484 int PEM_write_bio_PKCS8PrivateKey_nid(
BIO *bp,
EVP_PKEY *x,
int nid,
485 char *kstr,
int klen,
486 pem_password_cb *cb,
void *u);
488 char *,
int, pem_password_cb *,
void *);
489 int i2d_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc,
490 char *kstr,
int klen,
491 pem_password_cb *cb,
void *u);
492 int i2d_PKCS8PrivateKey_nid_bio(BIO *bp, EVP_PKEY *x,
int nid,
493 char *kstr,
int klen,
494 pem_password_cb *cb,
void *u);
495 EVP_PKEY *d2i_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY **x, pem_password_cb *cb,
498 int i2d_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc,
499 char *kstr,
int klen,
500 pem_password_cb *cb,
void *u);
501 int i2d_PKCS8PrivateKey_nid_fp(FILE *fp, EVP_PKEY *x,
int nid,
502 char *kstr,
int klen,
503 pem_password_cb *cb,
void *u);
504 int PEM_write_PKCS8PrivateKey_nid(FILE *fp, EVP_PKEY *x,
int nid,
505 char *kstr,
int klen,
506 pem_password_cb *cb,
void *u);
508 EVP_PKEY *d2i_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY **x, pem_password_cb *cb,
511 int PEM_write_PKCS8PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc,
512 char *kstr,
int klen, pem_password_cb *cd,
515 EVP_PKEY *PEM_read_bio_Parameters(BIO *bp, EVP_PKEY **x);
516 int PEM_write_bio_Parameters(BIO *bp, EVP_PKEY *x);
518 EVP_PKEY *b2i_PrivateKey(const
unsigned char **in,
long length);
519 EVP_PKEY *b2i_PublicKey(const
unsigned char **in,
long length);
520 EVP_PKEY *b2i_PrivateKey_bio(BIO *in);
521 EVP_PKEY *b2i_PublicKey_bio(BIO *in);
522 int i2b_PrivateKey_bio(BIO *out, EVP_PKEY *pk);
523 int i2b_PublicKey_bio(BIO *out, EVP_PKEY *pk);
524 # ifndef OPENSSL_NO_RC4
525 EVP_PKEY *b2i_PVK_bio(BIO *in, pem_password_cb *cb,
void *u);
526 int i2b_PVK_bio(BIO *out, EVP_PKEY *pk,
int enclevel,
527 pem_password_cb *cb,
void *u);
536 void ERR_load_PEM_strings(
void);
541 # define PEM_F_B2I_DSS 127
542 # define PEM_F_B2I_PVK_BIO 128
543 # define PEM_F_B2I_RSA 129
544 # define PEM_F_CHECK_BITLEN_DSA 130
545 # define PEM_F_CHECK_BITLEN_RSA 131
546 # define PEM_F_D2I_PKCS8PRIVATEKEY_BIO 120
547 # define PEM_F_D2I_PKCS8PRIVATEKEY_FP 121
548 # define PEM_F_DO_B2I 132
549 # define PEM_F_DO_B2I_BIO 133
550 # define PEM_F_DO_BLOB_HEADER 134
551 # define PEM_F_DO_PK8PKEY 126
552 # define PEM_F_DO_PK8PKEY_FP 125
553 # define PEM_F_DO_PVK_BODY 135
554 # define PEM_F_DO_PVK_HEADER 136
555 # define PEM_F_I2B_PVK 137
556 # define PEM_F_I2B_PVK_BIO 138
557 # define PEM_F_LOAD_IV 101
558 # define PEM_F_PEM_ASN1_READ 102
559 # define PEM_F_PEM_ASN1_READ_BIO 103
560 # define PEM_F_PEM_ASN1_WRITE 104
561 # define PEM_F_PEM_ASN1_WRITE_BIO 105
562 # define PEM_F_PEM_DEF_CALLBACK 100
563 # define PEM_F_PEM_DO_HEADER 106
564 # define PEM_F_PEM_F_PEM_WRITE_PKCS8PRIVATEKEY 118
565 # define PEM_F_PEM_GET_EVP_CIPHER_INFO 107
566 # define PEM_F_PEM_PK8PKEY 119
567 # define PEM_F_PEM_READ 108
568 # define PEM_F_PEM_READ_BIO 109
569 # define PEM_F_PEM_READ_BIO_DHPARAMS 141
570 # define PEM_F_PEM_READ_BIO_PARAMETERS 140
571 # define PEM_F_PEM_READ_BIO_PRIVATEKEY 123
572 # define PEM_F_PEM_READ_DHPARAMS 142
573 # define PEM_F_PEM_READ_PRIVATEKEY 124
574 # define PEM_F_PEM_SEALFINAL 110
575 # define PEM_F_PEM_SEALINIT 111
576 # define PEM_F_PEM_SIGNFINAL 112
577 # define PEM_F_PEM_WRITE 113
578 # define PEM_F_PEM_WRITE_BIO 114
579 # define PEM_F_PEM_WRITE_PRIVATEKEY 139
580 # define PEM_F_PEM_X509_INFO_READ 115
581 # define PEM_F_PEM_X509_INFO_READ_BIO 116
582 # define PEM_F_PEM_X509_INFO_WRITE_BIO 117
585 # define PEM_R_BAD_BASE64_DECODE 100
586 # define PEM_R_BAD_DECRYPT 101
587 # define PEM_R_BAD_END_LINE 102
588 # define PEM_R_BAD_IV_CHARS 103
589 # define PEM_R_BAD_MAGIC_NUMBER 116
590 # define PEM_R_BAD_PASSWORD_READ 104
591 # define PEM_R_BAD_VERSION_NUMBER 117
592 # define PEM_R_BIO_WRITE_FAILURE 118
593 # define PEM_R_CIPHER_IS_NULL 127
594 # define PEM_R_ERROR_CONVERTING_PRIVATE_KEY 115
595 # define PEM_R_EXPECTING_PRIVATE_KEY_BLOB 119
596 # define PEM_R_EXPECTING_PUBLIC_KEY_BLOB 120
597 # define PEM_R_HEADER_TOO_LONG 128
598 # define PEM_R_INCONSISTENT_HEADER 121
599 # define PEM_R_KEYBLOB_HEADER_PARSE_ERROR 122
600 # define PEM_R_KEYBLOB_TOO_SHORT 123
601 # define PEM_R_NOT_DEK_INFO 105
602 # define PEM_R_NOT_ENCRYPTED 106
603 # define PEM_R_NOT_PROC_TYPE 107
604 # define PEM_R_NO_START_LINE 108
605 # define PEM_R_PROBLEMS_GETTING_PASSWORD 109
606 # define PEM_R_PUBLIC_KEY_NO_RSA 110
607 # define PEM_R_PVK_DATA_TOO_SHORT 124
608 # define PEM_R_PVK_TOO_SHORT 125
609 # define PEM_R_READ_KEY 111
610 # define PEM_R_SHORT_HEADER 112
611 # define PEM_R_UNSUPPORTED_CIPHER 113
612 # define PEM_R_UNSUPPORTED_ENCRYPTION 114
613 # define PEM_R_UNSUPPORTED_KEY_COMPONENTS 126