.\" -*- coding: UTF-8 -*- .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45) .\" .\" Standard preamble: .\" ======================================================================== .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .de IX .. .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .if n .ds AD l .\" .\" Required to disable full justification in groff 1.23.0. .\" ======================================================================== .\" .IX Title "D2I_X509 3ssl" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH D2I_X509 3ssl "7 أبريل 2026" 3.6.2 OpenSSL .if n .ad l .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .nh .SH الاسم d2i_ACCESS_DESCRIPTION, d2i_ADMISSIONS, d2i_ADMISSION_SYNTAX, d2i_ASIdOrRange, d2i_ASIdentifierChoice, d2i_ASIdentifiers, d2i_ASN1_BIT_STRING, d2i_ASN1_BMPSTRING, d2i_ASN1_ENUMERATED, d2i_ASN1_GENERALIZEDTIME, d2i_ASN1_GENERALSTRING, d2i_ASN1_IA5STRING, d2i_ASN1_INTEGER, d2i_ASN1_NULL, d2i_ASN1_OBJECT, d2i_ASN1_OCTET_STRING, d2i_ASN1_PRINTABLE, d2i_ASN1_PRINTABLESTRING, d2i_ASN1_SEQUENCE_ANY, d2i_ASN1_SET_ANY, d2i_ASN1_T61STRING, d2i_ASN1_TIME, d2i_ASN1_TYPE, d2i_ASN1_UINTEGER, d2i_ASN1_UNIVERSALSTRING, d2i_ASN1_UTCTIME, d2i_ASN1_UTF8STRING, d2i_ASN1_VISIBLESTRING, d2i_ASRange, d2i_AUTHORITY_INFO_ACCESS, d2i_AUTHORITY_KEYID, d2i_BASIC_CONSTRAINTS, d2i_CERTIFICATEPOLICIES, d2i_CMS_ContentInfo, d2i_CMS_ReceiptRequest, d2i_CMS_bio, d2i_CRL_DIST_POINTS, d2i_DHxparams, d2i_DIRECTORYSTRING, d2i_DISPLAYTEXT, d2i_DIST_POINT, d2i_DIST_POINT_NAME, d2i_DSA_SIG, d2i_ECDSA_SIG, d2i_ECPKParameters, d2i_EDIPARTYNAME, d2i_ESS_CERT_ID, d2i_ESS_CERT_ID_V2, d2i_ESS_ISSUER_SERIAL, d2i_ESS_SIGNING_CERT, d2i_ESS_SIGNING_CERT_V2, d2i_EXTENDED_KEY_USAGE, d2i_GENERAL_NAME, d2i_GENERAL_NAMES, d2i_IPAddressChoice, d2i_IPAddressFamily, d2i_IPAddressOrRange, d2i_IPAddressRange, d2i_ISSUER_SIGN_TOOL, d2i_ISSUING_DIST_POINT, d2i_NAMING_AUTHORITY, d2i_NETSCAPE_CERT_SEQUENCE, d2i_NETSCAPE_SPKAC, d2i_NETSCAPE_SPKI, d2i_NOTICEREF, d2i_OCSP_BASICRESP, d2i_OCSP_CERTID, d2i_OCSP_CERTSTATUS, d2i_OCSP_CRLID, d2i_OCSP_ONEREQ, d2i_OCSP_REQINFO, d2i_OCSP_REQUEST, d2i_OCSP_RESPBYTES, d2i_OCSP_RESPDATA, d2i_OCSP_RESPID, d2i_OCSP_RESPONSE, d2i_OCSP_REVOKEDINFO, d2i_OCSP_SERVICELOC, d2i_OCSP_SIGNATURE, d2i_OCSP_SINGLERESP, d2i_OSSL_AA_DIST_POINT, d2i_OSSL_ALLOWED_ATTRIBUTES_CHOICE, d2i_OSSL_ALLOWED_ATTRIBUTES_ITEM, d2i_OSSL_ALLOWED_ATTRIBUTES_SYNTAX, d2i_OSSL_ATAV, d2i_OSSL_ATTRIBUTE_DESCRIPTOR, d2i_OSSL_ATTRIBUTE_MAPPING, d2i_OSSL_ATTRIBUTE_MAPPINGS, d2i_OSSL_ATTRIBUTE_TYPE_MAPPING, d2i_OSSL_ATTRIBUTE_VALUE_MAPPING, d2i_OSSL_ATTRIBUTES_SYNTAX, d2i_OSSL_AUTHORITY_ATTRIBUTE_ID_SYNTAX, d2i_OSSL_BASIC_ATTR_CONSTRAINTS, d2i_OSSL_CMP_ATAVS, d2i_OSSL_CMP_MSG, d2i_OSSL_CMP_PKIHEADER, d2i_OSSL_CMP_PKISI, d2i_OSSL_CRMF_CERTID, d2i_OSSL_CRMF_CERTTEMPLATE, d2i_OSSL_CRMF_ENCRYPTEDKEY, d2i_OSSL_CRMF_ENCRYPTEDVALUE, d2i_OSSL_CRMF_MSG, d2i_OSSL_CRMF_MSGS, d2i_OSSL_CRMF_PBMPARAMETER, d2i_OSSL_CRMF_PKIPUBLICATIONINFO, d2i_OSSL_CRMF_SINGLEPUBINFO, d2i_OSSL_DAY_TIME, d2i_OSSL_DAY_TIME_BAND, d2i_OSSL_HASH, d2i_OSSL_IETF_ATTR_SYNTAX, d2i_OSSL_INFO_SYNTAX, d2i_OSSL_INFO_SYNTAX_POINTER, d2i_OSSL_ISSUER_SERIAL, d2i_OSSL_NAMED_DAY, d2i_OSSL_OBJECT_DIGEST_INFO, d2i_OSSL_PRIVILEGE_POLICY_ID, d2i_OSSL_ROLE_SPEC_CERT_ID, d2i_OSSL_ROLE_SPEC_CERT_ID_SYNTAX, d2i_OSSL_TARGET_CERT, d2i_OSSL_TARGET, d2i_OSSL_TARGETING_INFORMATION, d2i_OSSL_TARGETS, d2i_OSSL_TIME_PERIOD, d2i_OSSL_TIME_SPEC, d2i_OSSL_TIME_SPEC_ABSOLUTE, d2i_OSSL_TIME_SPEC_DAY, d2i_OSSL_TIME_SPEC_MONTH, d2i_OSSL_TIME_SPEC_TIME, d2i_OSSL_TIME_SPEC_WEEKS, d2i_OSSL_TIME_SPEC_X_DAY_OF, d2i_OSSL_USER_NOTICE_SYNTAX, d2i_OTHERNAME, d2i_PBE2PARAM, d2i_PBEPARAM, d2i_PBKDF2PARAM, d2i_PBMAC1PARAM, d2i_PKCS12, d2i_PKCS12_BAGS, d2i_PKCS12_MAC_DATA, d2i_PKCS12_SAFEBAG, d2i_PKCS12_bio, d2i_PKCS12_fp, d2i_PKCS7, d2i_PKCS7_DIGEST, d2i_PKCS7_ENCRYPT, d2i_PKCS7_ENC_CONTENT, d2i_PKCS7_ENVELOPE, d2i_PKCS7_ISSUER_AND_SERIAL, d2i_PKCS7_RECIP_INFO, d2i_PKCS7_SIGNED, d2i_PKCS7_SIGNER_INFO, d2i_PKCS7_SIGN_ENVELOPE, d2i_PKCS7_bio, d2i_PKCS7_fp, d2i_PKCS8_PRIV_KEY_INFO, d2i_PKCS8_PRIV_KEY_INFO_bio, d2i_PKCS8_PRIV_KEY_INFO_fp, d2i_PKCS8_bio, d2i_PKCS8_fp, d2i_PKEY_USAGE_PERIOD, d2i_POLICYINFO, d2i_POLICYQUALINFO, d2i_PROFESSION_INFO, d2i_PROXY_CERT_INFO_EXTENSION, d2i_PROXY_POLICY, d2i_RSA_OAEP_PARAMS, d2i_RSA_PSS_PARAMS, d2i_SCRYPT_PARAMS, d2i_SCT_LIST, d2i_SXNET, d2i_SXNETID, d2i_TS_ACCURACY, d2i_TS_MSG_IMPRINT, d2i_TS_MSG_IMPRINT_bio, d2i_TS_MSG_IMPRINT_fp, d2i_TS_REQ, d2i_TS_REQ_bio, d2i_TS_REQ_fp, d2i_TS_RESP, d2i_TS_RESP_bio, d2i_TS_RESP_fp, d2i_TS_STATUS_INFO, d2i_TS_TST_INFO, d2i_TS_TST_INFO_bio, d2i_TS_TST_INFO_fp, d2i_USERNOTICE, d2i_X509, d2i_X509_bio, d2i_X509_fp, d2i_X509_ACERT, d2i_X509_ACERT_bio, d2i_X509_ACERT_fp, d2i_X509_ALGOR, d2i_X509_ALGORS, d2i_X509_ATTRIBUTE, d2i_X509_CERT_AUX, d2i_X509_CINF, d2i_X509_CRL, d2i_X509_CRL_INFO, d2i_X509_CRL_bio, d2i_X509_CRL_fp, d2i_X509_EXTENSION, d2i_X509_EXTENSIONS, d2i_X509_NAME, d2i_X509_NAME_ENTRY, d2i_X509_PUBKEY, d2i_X509_PUBKEY_bio, d2i_X509_PUBKEY_fp, d2i_X509_REQ, d2i_X509_REQ_INFO, d2i_X509_REQ_bio, d2i_X509_REQ_fp, d2i_X509_REVOKED, d2i_X509_SIG, d2i_X509_VAL, i2d_ACCESS_DESCRIPTION, i2d_ADMISSIONS, i2d_ADMISSION_SYNTAX, i2d_ASIdOrRange, i2d_ASIdentifierChoice, i2d_ASIdentifiers, i2d_ASN1_BIT_STRING, i2d_ASN1_BMPSTRING, i2d_ASN1_ENUMERATED, i2d_ASN1_GENERALIZEDTIME, i2d_ASN1_GENERALSTRING, i2d_ASN1_IA5STRING, i2d_ASN1_INTEGER, i2d_ASN1_NULL, i2d_ASN1_OBJECT, i2d_ASN1_OCTET_STRING, i2d_ASN1_PRINTABLE, i2d_ASN1_PRINTABLESTRING, i2d_ASN1_SEQUENCE_ANY, i2d_ASN1_SET_ANY, i2d_ASN1_T61STRING, i2d_ASN1_TIME, i2d_ASN1_TYPE, i2d_ASN1_UNIVERSALSTRING, i2d_ASN1_UTCTIME, i2d_ASN1_UTF8STRING, i2d_ASN1_VISIBLESTRING, i2d_ASN1_bio_stream, i2d_ASRange, i2d_AUTHORITY_INFO_ACCESS, i2d_AUTHORITY_KEYID, i2d_BASIC_CONSTRAINTS, i2d_CERTIFICATEPOLICIES, i2d_CMS_ContentInfo, i2d_CMS_ReceiptRequest, i2d_CMS_bio, i2d_CRL_DIST_POINTS, i2d_DHxparams, i2d_DIRECTORYSTRING, i2d_DISPLAYTEXT, i2d_DIST_POINT, i2d_DIST_POINT_NAME, i2d_DSA_SIG, i2d_ECDSA_SIG, i2d_ECPKParameters, i2d_EDIPARTYNAME, i2d_ESS_CERT_ID, i2d_ESS_CERT_ID_V2, i2d_ESS_ISSUER_SERIAL, i2d_ESS_SIGNING_CERT, i2d_ESS_SIGNING_CERT_V2, i2d_EXTENDED_KEY_USAGE, i2d_GENERAL_NAME, i2d_GENERAL_NAMES, i2d_IPAddressChoice, i2d_IPAddressFamily, i2d_IPAddressOrRange, i2d_IPAddressRange, i2d_ISSUER_SIGN_TOOL, i2d_ISSUING_DIST_POINT, i2d_NAMING_AUTHORITY, i2d_NETSCAPE_CERT_SEQUENCE, i2d_NETSCAPE_SPKAC, i2d_NETSCAPE_SPKI, i2d_NOTICEREF, i2d_OCSP_BASICRESP, i2d_OCSP_CERTID, i2d_OCSP_CERTSTATUS, i2d_OCSP_CRLID, i2d_OCSP_ONEREQ, i2d_OCSP_REQINFO, i2d_OCSP_REQUEST, i2d_OCSP_RESPBYTES, i2d_OCSP_RESPDATA, i2d_OCSP_RESPID, i2d_OCSP_RESPONSE, i2d_OCSP_REVOKEDINFO, i2d_OCSP_SERVICELOC, i2d_OCSP_SIGNATURE, i2d_OCSP_SINGLERESP, i2d_OSSL_AA_DIST_POINT, i2d_OSSL_ALLOWED_ATTRIBUTES_CHOICE, i2d_OSSL_ALLOWED_ATTRIBUTES_ITEM, i2d_OSSL_ALLOWED_ATTRIBUTES_SYNTAX, i2d_OSSL_ATAV, i2d_OSSL_ATTRIBUTE_DESCRIPTOR, i2d_OSSL_ATTRIBUTE_MAPPING, i2d_OSSL_ATTRIBUTE_MAPPINGS, i2d_OSSL_ATTRIBUTE_TYPE_MAPPING, i2d_OSSL_ATTRIBUTE_VALUE_MAPPING, i2d_OSSL_ATTRIBUTES_SYNTAX, i2d_OSSL_AUTHORITY_ATTRIBUTE_ID_SYNTAX, i2d_OSSL_BASIC_ATTR_CONSTRAINTS, i2d_OSSL_CMP_ATAVS, i2d_OSSL_CMP_MSG, i2d_OSSL_CMP_PKIHEADER, i2d_OSSL_CMP_PKISI, i2d_OSSL_CRMF_CERTID, i2d_OSSL_CRMF_CERTTEMPLATE, i2d_OSSL_CRMF_ENCRYPTEDKEY, i2d_OSSL_CRMF_ENCRYPTEDVALUE, i2d_OSSL_CRMF_MSG, i2d_OSSL_CRMF_MSGS, i2d_OSSL_CRMF_PBMPARAMETER, i2d_OSSL_CRMF_PKIPUBLICATIONINFO, i2d_OSSL_CRMF_SINGLEPUBINFO, i2d_OSSL_HASH, i2d_OSSL_DAY_TIME, i2d_OSSL_DAY_TIME_BAND, i2d_OSSL_IETF_ATTR_SYNTAX, i2d_OSSL_INFO_SYNTAX, i2d_OSSL_INFO_SYNTAX_POINTER, i2d_OSSL_ISSUER_SERIAL, i2d_OSSL_NAMED_DAY, i2d_OSSL_OBJECT_DIGEST_INFO, i2d_OSSL_PRIVILEGE_POLICY_ID, i2d_OSSL_ROLE_SPEC_CERT_ID, i2d_OSSL_ROLE_SPEC_CERT_ID_SYNTAX, i2d_OSSL_TARGET_CERT, i2d_OSSL_TARGET, i2d_OSSL_TARGETING_INFORMATION, i2d_OSSL_TARGETS, i2d_OSSL_TIME_PERIOD, i2d_OSSL_TIME_SPEC, i2d_OSSL_TIME_SPEC_ABSOLUTE, i2d_OSSL_TIME_SPEC_DAY, i2d_OSSL_TIME_SPEC_MONTH, i2d_OSSL_TIME_SPEC_TIME, i2d_OSSL_TIME_SPEC_WEEKS, i2d_OSSL_TIME_SPEC_X_DAY_OF, i2d_OSSL_USER_NOTICE_SYNTAX, i2d_OTHERNAME, i2d_PBE2PARAM, i2d_PBEPARAM, i2d_PBKDF2PARAM, i2d_PBMAC1PARAM, i2d_PKCS12, i2d_PKCS12_BAGS, i2d_PKCS12_MAC_DATA, i2d_PKCS12_SAFEBAG, i2d_PKCS12_bio, i2d_PKCS12_fp, i2d_PKCS7, i2d_PKCS7_DIGEST, i2d_PKCS7_ENCRYPT, i2d_PKCS7_ENC_CONTENT, i2d_PKCS7_ENVELOPE, i2d_PKCS7_ISSUER_AND_SERIAL, i2d_PKCS7_NDEF, i2d_PKCS7_RECIP_INFO, i2d_PKCS7_SIGNED, i2d_PKCS7_SIGNER_INFO, i2d_PKCS7_SIGN_ENVELOPE, i2d_PKCS7_bio, i2d_PKCS7_fp, i2d_PKCS8PrivateKeyInfo_bio, i2d_PKCS8PrivateKeyInfo_fp, i2d_PKCS8_PRIV_KEY_INFO, i2d_PKCS8_PRIV_KEY_INFO_bio, i2d_PKCS8_PRIV_KEY_INFO_fp, i2d_PKCS8_bio, i2d_PKCS8_fp, i2d_PKEY_USAGE_PERIOD, i2d_POLICYINFO, i2d_POLICYQUALINFO, i2d_PROFESSION_INFO, i2d_PROXY_CERT_INFO_EXTENSION, i2d_PROXY_POLICY, i2d_RSA_OAEP_PARAMS, i2d_RSA_PSS_PARAMS, i2d_SCRYPT_PARAMS, i2d_SCT_LIST, i2d_SXNET, i2d_SXNETID, i2d_TS_ACCURACY, i2d_TS_MSG_IMPRINT, i2d_TS_MSG_IMPRINT_bio, i2d_TS_MSG_IMPRINT_fp, i2d_TS_REQ, i2d_TS_REQ_bio, i2d_TS_REQ_fp, i2d_TS_RESP, i2d_TS_RESP_bio, i2d_TS_RESP_fp, i2d_TS_STATUS_INFO, i2d_TS_TST_INFO, i2d_TS_TST_INFO_bio, i2d_TS_TST_INFO_fp, i2d_USERNOTICE, i2d_X509, i2d_X509_bio, i2d_X509_fp, i2d_X509_ACERT, i2d_X509_ACERT_bio, i2d_X509_ACERT_fp, i2d_X509_ALGOR, i2d_X509_ALGORS, i2d_X509_ATTRIBUTE, i2d_X509_CERT_AUX, i2d_X509_CINF, i2d_X509_CRL, i2d_X509_CRL_INFO, i2d_X509_CRL_bio, i2d_X509_CRL_fp, i2d_X509_EXTENSION, i2d_X509_EXTENSIONS, i2d_X509_NAME, i2d_X509_NAME_ENTRY, i2d_X509_PUBKEY, i2d_X509_PUBKEY_bio, i2d_X509_PUBKEY_fp, i2d_X509_REQ, i2d_X509_REQ_INFO, i2d_X509_REQ_bio, i2d_X509_REQ_fp, i2d_X509_REVOKED, i2d_X509_SIG, i2d_X509_VAL, \&\- convert objects from/to ASN.1/DER representation .SH موجز .IX Header موجز .Vb 3 \& TYPE *d2i_TYPE(TYPE **a, const unsigned char **ppin, long length); \& TYPE *d2i_TYPE_bio(BIO *bp, TYPE **a); \& TYPE *d2i_TYPE_fp(FILE *fp, TYPE **a); \& \& int i2d_TYPE(const TYPE *a, unsigned char **ppout); \& int i2d_TYPE(TYPE *a, unsigned char **ppout); \& int i2d_TYPE_fp(FILE *fp, const TYPE *a); \& int i2d_TYPE_fp(FILE *fp, TYPE *a); \& int i2d_TYPE_bio(BIO *bp, const TYPE *a); \& int i2d_TYPE_bio(BIO *bp, TYPE *a); .Ve .SH الوصف .IX Header الوصف في الوصف هنا، يُستخدم \f(BITYPE\fR كعنصر نائب لأي من أنواع بيانات OpenSSL، مثل \fBX509_CRL\fP. معاملات الدالة \fIppin\fP و \fIppout\fP تكون عمومًا إما مسماة \fIpp\fP في الرؤوس، أو \fIin\fP و \fIout\fP. .PP تحول هذه الدوال كائنات OpenSSL من وإلى ترميز ASN.1/DER الخاص بها. على عكس هياكل C التي يمكن أن تحتوي على مؤشرات لكائنات فرعية داخلها، فإن DER هو ترميز متسلسل، مناسب للإرسال عبر الشبكة، والكتابة إلى ملف، وما إلى ذلك. .PP تحاول \&\fBd2i_\fP\f(BITYPE\fR() فك تشفير \fIlen\fP بايت عند \fI*ppin\fP. إذا نجحت، يُعاد مؤشر إلى هيكل \f(BITYPE\fR ويُزاد \fI*ppin\fP إلى البايت التالي للبيانات المحللة. إذا كان \fIa\fP ليس NULL، فسيُكتب مؤشر إلى الهيكل المُعاد أيضًا إلى \fI*a\fP. إذا حدث خطأ، يُعاد NULL. يحتفظ المستدعي بملكية الكائن المُعاد ويحتاج إلى تحريره عندما لا يعود بحاجة إليه، مثل استخدام \fBX509_free()\fP لكائنات X509 أو \fBDSA_SIG_free()\fP لكائنات DSA_SIG. .PP عند الإرجاع الناجح، إذا كان \fI*a\fP ليس NULL، فسيُفترض أن \fI*a\fP يحتوي على هيكل \f(BITYPE\fR صالح وتُبذل محاولة لإعادة استخدامه. بالنسبة لهياكل \f(BITYPE\fR حيث يكون ذلك مهمًا، من الممكن إعداد سياق مكتبة على الهيكل المُفكك بهذه الطريقة (انظر قسم \fBEXAMPLES\fP). ومع ذلك، فإن استخدام قدرة "إعادة الاستخدام" لأغراض أخرى هو \fBغير موصى به بشدة\fP (انظر \fBBUGS\fP أدناه، والنقاش في قسم \fBRETURN VALUES\fP). .PP \&\fBd2i_\fP\f(BITYPE\fB_bio\fP() مشابهة لـ \fBd2i_\fP\f(BITYPE\fR() باستثناء أنها تحاول تحليل البيانات من BIO \fIbp\fP. .PP \&\fBd2i_\fP\f(BITYPE\fB_fp\fP() مشابهة لـ \fBd2i_\fP\f(BITYPE\fR() باستثناء أنها تحاول تحليل البيانات من مؤشر FILE \fIfp\fP. .PP تقوم \&\fBi2d_\fP\f(BITYPE\fR() بترميز الهيكل المشار إليه بواسطة \fIa\fP إلى تنسيق DER. إذا كان \fIppout\fP ليس NULL، فتكتب البيانات المُرمزة بـ DER إلى المخزن المؤقت عند \fI*ppout\fP، وتُزيده للإشارة إلى ما بعد البيانات التي كُتبت للتو. إذا كانت قيمة الإرجاع سالبة، فقد حدث خطأ، وإلا فإنها تُرجع طول البيانات المُرمزة. .PP إذا كان \fI*ppout\fP هو NULL، فسيُخصص ذاكرة لمخزن مؤقت وتُكتب البيانات المُرمزة إليه. في هذه الحالة، لا يُزاد \fI*ppout\fP ويشير إلى بداية البيانات التي كُتبت للتو. .PP \&\fBi2d_\fP\f(BITYPE\fB_bio\fP() مشابهة لـ \fBi2d_\fP\f(BITYPE\fR() باستثناء أنها تكتب ترميز الهيكل \fIa\fP إلى BIO \fIbp\fP وتُعيد 1 للنجاح و0 للفشل. .PP \&\fBi2d_\fP\f(BITYPE\fB_fp\fP() مشابهة لـ \fBi2d_\fP\f(BITYPE\fR() باستثناء أنها تكتب ترميز الهيكل \fIa\fP إلى مؤشر FILE \fIfp\fP وتُعيد 1 للنجاح و0 للفشل. .PP لا تقوم هذه الإجراءات بتعمية المفاتيح الخاصة وبالتالي لا توفر أي أمان؛ استخدم \fBPEM_write_PrivateKey\fP\|(3) أو ما شابه ذلك للكتابة إلى الملفات. .SH ملاحظات .IX Header ملاحظات الحرفان \fBi\fP و \fBd\fP في \fBi2d_\fP\f(BITYPE\fR() يرمزان إلى "internal" (أي هيكل C داخلي) و "DER" على التوالي. لذا تقوم \fBi2d_\fP\f(BITYPE\fR() بالتحويل من الداخلي إلى DER. .PP يمكن للدوال أيضًا فهم صيغ \fBBER\fP. .PP يجب أن يكون هيكل TYPE الفعلي الممرر إلى \fBi2d_\fP\f(BITYPE\fR() هيكل \f(BITYPE\fR صالحًا ومملوءًا \-\- \fBلا يمكن\fP ببساطة تزويده بهيكل فارغ مثل الذي يعيده \fBTYPE_new()\fP. .PP البيانات المشفرة بصيغة ثنائية وقد تحتوي على أصفار مدمجة. لذلك، يجب فتح أي مؤشرات ملفات (FILE pointers) أو BIOs في الوضع الثنائي. لن تعيد الدوال مثل \fBstrlen()\fP الطول الصحيح للهيكل المشفر. .PP يمكن للطرق التي يُزاد بها \fI*ppin\fP و \fI*ppout\fP بعد العملية أن تصطاد غير الحذر. راجع قسم \fBWARNINGS\fP لبعض الأخطاء الشائعة. سبب سلوك الزيادة الآلية هذا هو عكس استخدام نموذجي لدوال ASN1: بعد ترميز أو فك ترميز هيكل واحد، سيُعالج آخر بعده. .PP قد تكون النقاط التالية حول أنواع البيانات مفيدة: .IP \fBASN1_OBJECT\fP 4 .IX Item ASN1_OBJECT يمثل مُعرِّف كائن ASN1. .IP \fBDHparams\fP 4 .IX Item DHparams يمثل هيكل معاملات DH وفقًا لـ PKCS#3. .IP \fBDHxparams\fP 4 .IX Item DHxparams يمثل هيكل معاملات DH وفقًا لـ ANSI X9.42. .IP \fBECDSA_SIG\fP 4 .IX Item ECDSA_SIG يمثل توقيع ECDSA. .IP \fBX509_ALGOR\fP 4 .IX Item X509_ALGOR يمثل هيكل \fBAlgorithmIdentifier\fP المستخدم في IETF RFC 6960 وفي أماكن أخرى. .IP \fBX509_NAME\fP 4 .IX Item X509_NAME يمثل نوع \fBName\fP المستخدم لأسماء الموضوع والمُصدِر في IETF RFC 6960 وفي أماكن أخرى. .IP \fBX509_REQ\fP 4 .IX Item X509_REQ يمثل طلب شهادة وفقًا لـ PKCS#10. .IP \fBX509_SIG\fP 4 .IX Item X509_SIG يمثل هيكل \fBDigestInfo\fP المُعرَّف في PKCS#1 وPKCS#7. .SH "القيم المُرجعة" .IX Header "القيم المُرجعة" \&\fBd2i_\fP\f(BITYPE\fR()، و \fBd2i_\fP\f(BITYPE\fB_bio\fP()، و \fBd2i_\fP\f(BITYPE\fB_fp\fP() تعيد بنية \&\f(BITYPE\fR صالحة أو NULL في حال حدوث خطأ. إذا استُخدمت قدرة "إعادة الاستخدام" مع تمرير بنية صالحة عبر \fIa\fP، فسيُحرر الكائن في حال حدوث خطأ ويُضبط \fI*a\fP إلى NULL. .PP \&\fBi2d_\fP\f(BITYPE\fR() تعيد عدد البايتات التي رُمزت بنجاح أو قيمة سالبة في حال حدوث خطأ. .PP تُرجع \fBi2d_\fP\f(BITYPE\fB_bio\fP() و \fBi2d_\fP\f(BITYPE\fB_fp\fP()، بالإضافة إلى \fBi2d_ASN1_bio_stream()\fP، القيمة 1 عند النجاح و0 إذا حدث خطأ. .PP عند حدوث خطأ، قد تُسجِّل هذه الدوال الخطأ في طابور أخطاء OpenSSL. يمكن فحص طابور الأخطاء هذا باستخدام عائلة دوال \fBERR\fP، مثل \&\fBERR_print_errors\fP\|(3) و \fBERR_peek_last_error_all\fP\|(3). .SH أمثلة .IX Header أمثلة تخصيص وترميز ترميز DER لبنية X509: .PP .Vb 2 \& int len; \& unsigned char *buf; \& \& buf = NULL; \& len = i2d_X509(x, &buf); \& if (len < 0) \& /* error */ .Ve .PP محاولة فك ترميز خبيئة: .PP .Vb 4 \& X509 *x; \& unsigned char *buf; \& const unsigned char *p; \& int len; \& \& /* Set up buf and len to point to the input buffer. */ \& p = buf; \& x = d2i_X509(NULL, &p, len); \& if (x == NULL) \& /* error */ .Ve .PP تقنية بديلة: .PP .Vb 4 \& X509 *x; \& unsigned char *buf; \& const unsigned char *p; \& int len; \& \& /* Set up buf and len to point to the input buffer. */ \& p = buf; \& x = NULL; \& \& if (d2i_X509(&x, &p, len) == NULL) \& /* error */ .Ve .PP إعداد سياق مكتبة واستعلام خاصية: .PP .Vb 6 \& X509 *x; \& unsigned char *buf; \& const unsigned char *p; \& int len; \& OSSL_LIB_CTX *libctx = ....; \& const char *propq = ....; \& \& /* Set up buf and len to point to the input buffer. */ \& p = buf; \& x = X509_new_ex(libctx, propq); \& \& if (d2i_X509(&x, &p, len) == NULL) \& /* error, x was freed and NULL assigned to it (see RETURN VALUES) */ .Ve .SH تحذيرات .IX Header تحذيرات استخدام متغير مؤقت إلزامي. خطأ شائع هو محاولة استخدام خبيئة مباشرة كما يلي: .PP .Vb 2 \& int len; \& unsigned char *buf; \& \& len = i2d_X509(x, NULL); \& buf = OPENSSL_malloc(len); \& ... \& i2d_X509(x, &buf); \& ... \& OPENSSL_free(buf); .Ve .PP سيؤدي هذا الكود إلى أن يحتوي \fIbuf\fP ظاهريًا على بيانات غير صالحة لأنه زِيد بعد الاستدعاء للإشارة إلى ما بعد البيانات المكتوبة للتو. أيضًا لن يحتوي \fIbuf\fP بعد الآن على المؤشر المخصص بواسطة \fBOPENSSL_malloc()\fP ومن المحتمل أن يتعطل الاستدعاء اللاحق لـ \fBOPENSSL_free()\fP. .PP فخ آخر يجب تجنبه هو إساءة استخدام الوسيط \fIa\fP لـ \fBd2i_\fP\f(BITYPE\fR(): .PP .Vb 1 \& X509 *x; \& \& if (d2i_X509(&x, &p, len) == NULL) \& /* error */ .Ve .PP سيؤدي هذا على الأرجح إلى تعطل في مكان ما داخل \fBd2i_X509()\fP. السبب في ذلك هو أن المتغير \fIx\fP غير مهيأ وستُبذل محاولة لتفسير قيمته (غير الصالحة) كبنية \fBX509\fP، مما يسبب عادةً انتهاكًا للتجزئة. إذا ضُبط \fIx\fP على NULL أولاً فلن يحدث هذا. .SH العلل .IX Header العلل في بعض إصدارات OpenSSL، سلوك "إعادة الاستخدام" لـ \fBd2i_\fP\f(BITYPE\fR() عندما يكون \&\fI*a\fP صالحًا معطل وقد تبقى بعض أجزاء البنية المعاد استخدامها إذا لم تكن موجودة في البنية الجديدة. بالإضافة إلى ذلك، في إصدارات OpenSSL قبل 1.1.0، عند استخدام سلوك "إعادة الاستخدام" وحدوث خطأ، يكون السلوك غير متناسق. تصرفت بعض الدوال كما هو موصوف هنا، بينما لم تحرر بعضها \fI*a\fP عند الخطأ ولم تضبط \fI*a\fP على NULL. .PP نتيجة للمشكلات المذكورة أعلاه، يُثبط بشدة سلوك "إعادة الاستخدام". .PP لن تُرجع \fBi2d_\fP\f(BITYPE\fR() خطأ في العديد من إصدارات OpenSSL، إذا لم تُهيأ الحقول الإلزامية بسبب خطأ برمجي فقد تحتوي البنية المشفرة على بيانات غير صالحة أو تحذف الحقول بالكامل ولن تُحلل بواسطة \fBd2i_\fP\f(BITYPE\fR(). قد يُصلح هذا في المستقبل لذا لا ينبغي للكود أن يفترض أن \fBi2d_\fP\f(BITYPE\fR() ستنجح دائمًا. .PP أي دالة ترمِّز بنية (\fBi2d_\fP\f(BITYPE\fR()، \&\fBi2d_\fP\f(BITYPE\fB_bio\fP() أو \fBi2d_\fP\f(BITYPE\fB_fp\fP()) قد تُرجع ترميزًا قديمًا إذا عُدلت البنية بعد إلغاء التسلسل أو التسلسل السابق. هذا لأن بعض الكائنات تخبئ الترميز لأسباب تتعلق بالكفاءة. .SH "انظر أيضًا" .IX Header "انظر أيضًا" \&\fBERR_print_errors\fP\|(3), \fBERR_peek_last_error_all\fP\|(3) .SH التاريخ .IX Header التاريخ أُضيفت \&\fBd2i_OSSL_ATTRIBUTES_SYNTAX()\fP, \fBd2i_OSSL_BASIC_ATTR_CONSTRAINTS()\fP, \&\fBd2i_OSSL_CMP_ATAVS()\fP, \fBd2i_OSSL_IETF_ATTR_SYNTAX()\fP, \&\fBd2i_OSSL_TARGET()\fP, \fBd2i_OSSL_TARGETING_INFORMATION()\fP, \&\fBd2i_OSSL_TARGETS()\fP, \fBd2i_OSSL_USER_NOTICE_SYNTAX()\fP, \&\fBd2i_PBMAC1PARAM()\fP, \fBd2i_X509_ACERT()\fP, \fBd2i_X509_ACERT_bio()\fP, \&\fBd2i_X509_ACERT_fp()\fP, \fBi2d_OSSL_ATTRIBUTES_SYNTAX()\fP, \&\fBi2d_OSSL_BASIC_ATTR_CONSTRAINTS()\fP, \fBi2d_OSSL_CMP_ATAVS()\fP, \&\fBi2d_OSSL_IETF_ATTR_SYNTAX()\fP, \fBi2d_OSSL_TARGET()\fP, \&\fBi2d_OSSL_TARGETING_INFORMATION()\fP, \fBi2d_OSSL_TARGETS()\fP, \&\fBi2d_OSSL_USER_NOTICE_SYNTAX()\fP, \fBi2d_PBMAC1PARAM()\fP, \fBi2d_X509_ACERT()\fP, \&\fBi2d_X509_ACERT_bio()\fP, \fBi2d_X509_ACERT_fp()\fP في OpenSSL 3.4. .PP أُضيفت \&\fBd2i_OSSL_AA_DIST_POINT()\fP, \&\fBd2i_OSSL_ALLOWED_ATTRIBUTES_CHOICE()\fP, \fBd2i_OSSL_ALLOWED_ATTRIBUTES_ITEM()\fP, \&\fBd2i_OSSL_ALLOWED_ATTRIBUTES_SYNTAX()\fP, \&\fBd2i_OSSL_ATAV()\fP, \fBd2i_OSSL_ATTRIBUTE_DESCRIPTOR()\fP, \fBd2i_OSSL_ATTRIBUTE_MAPPING()\fP, \&\fBd2i_OSSL_ATTRIBUTE_MAPPINGS()\fP, \fBd2i_OSSL_ATTRIBUTE_TYPE_MAPPING()\fP, \&\fBd2i_OSSL_ATTRIBUTE_VALUE_MAPPING()\fP, \fBd2i_OSSL_AUTHORITY_ATTRIBUTE_ID_SYNTAX()\fP, \&\fBd2i_OSSL_HASH()\fP, \fBd2i_OSSL_INFO_SYNTAX()\fP, \&\fBd2i_OSSL_INFO_SYNTAX_POINTER()\fP, \fBd2i_OSSL_PRIVILEGE_POLICY_ID()\fP, \&\fBd2i_OSSL_ROLE_SPEC_CERT_ID()\fP, \fBd2i_OSSL_ROLE_SPEC_CERT_ID_SYNTAX()\fP, \&\fBi2d_OSSL_AA_DIST_POINT()\fP, \&\fBi2d_OSSL_ALLOWED_ATTRIBUTES_CHOICE()\fP, \fBi2d_OSSL_ALLOWED_ATTRIBUTES_ITEM()\fP, \&\fBi2d_OSSL_ALLOWED_ATTRIBUTES_SYNTAX()\fP, \&\fBi2d_OSSL_ATAV()\fP, \fBi2d_OSSL_ATTRIBUTE_DESCRIPTOR()\fP, \fBi2d_OSSL_ATTRIBUTE_MAPPING()\fP, \&\fBi2d_OSSL_ATTRIBUTE_MAPPINGS()\fP, \fBi2d_OSSL_ATTRIBUTE_TYPE_MAPPING()\fP, \&\fBi2d_OSSL_ATTRIBUTE_VALUE_MAPPING()\fP, \fBi2d_OSSL_AUTHORITY_ATTRIBUTE_ID_SYNTAX()\fP, \&\fBi2d_OSSL_HASH()\fP, \fBi2d_OSSL_INFO_SYNTAX()\fP, \&\fBi2d_OSSL_INFO_SYNTAX_POINTER()\fP, \fBi2d_OSSL_PRIVILEGE_POLICY_ID()\fP, \&\fBi2d_OSSL_ROLE_SPEC_CERT_ID()\fP, \fBi2d_OSSL_ROLE_SPEC_CERT_ID_SYNTAX()\fP, \&\fBd2i_OSSL_CRMF_ENCRYPTEDKEY()\fP, \fBi2d_OSSL_CRMF_ENCRYPTEDKEY()\fP, \&\fBd2i_OSSL_DAY_TIME()\fP, \fBd2i_OSSL_DAY_TIME_BAND()\fP, \fBd2i_OSSL_NAMED_DAY()\fP, \&\fBd2i_OSSL_TIME_PERIOD()\fP, \fBd2i_OSSL_TIME_SPEC()\fP, \&\fBd2i_OSSL_TIME_SPEC_ABSOLUTE()\fP, \fBd2i_OSSL_TIME_SPEC_DAY()\fP, \&\fBd2i_OSSL_TIME_SPEC_MONTH()\fP, \fBd2i_OSSL_TIME_SPEC_TIME()\fP, \&\fBd2i_OSSL_TIME_SPEC_WEEKS()\fP, \fBd2i_OSSL_TIME_SPEC_X_DAY_OF()\fP, \&\fBi2d_OSSL_DAY_TIME()\fP, \fBi2d_OSSL_DAY_TIME_BAND()\fP, \&\fBi2d_OSSL_NAMED_DAY()\fP, \fBi2d_OSSL_TIME_PERIOD()\fP, \&\fBi2d_OSSL_TIME_SPEC()\fP, \fBi2d_OSSL_TIME_SPEC_ABSOLUTE()\fP, \&\fBi2d_OSSL_TIME_SPEC_DAY()\fP, \fBi2d_OSSL_TIME_SPEC_MONTH()\fP, \&\fBi2d_OSSL_TIME_SPEC_TIME()\fP, \fBi2d_OSSL_TIME_SPEC_WEEKS()\fP, \&\fBi2d_OSSL_TIME_SPEC_X_DAY_OF()\fP في OpenSSL 3.5. .SH "حقوق النسخ" .IX Header "حقوق النسخ" حقوق النشر 1998\-2025 لمؤلفي مشروع OpenSSL. جميع الحقوق محفوظة. .PP مرخص بموجب رخصة Apache 2.0 (المشار إليها فيما يلي بـ ”الرخصة“). لا يجوز لك استخدام هذا الملف إلا وفقًا لشروط الرخصة. يمكنك الحصول على نسخة منها في الملف LICENSE الموجود في حزمة التوزيع المصدرية أو على الرابط . .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .