ASN1_GENERATE_NCONF(3SSL)

الاسم
ASN1_generate_nconf, ASN1_generate_v3 - دوال توليد سلسلة ASN1

موجز
 #include <openssl/asn1.h>

 ASN1_TYPE *ASN1_generate_nconf(const char *str, CONF *nconf);
 ASN1_TYPE *ASN1_generate_v3(const char *str, X509V3_CTX *cnf);

الوصف
تولد هذه الدوال ترميز ASN1 لسلسلة في بنية ASN1_TYPE.

تحتوي str على السلسلة المراد تعميتها. تحتوي nconf أو cnf على معلومات التهيئة الاختيارية حيث تُقرأ سلاسل إضافية منها. تأتي nconf عادة من ملف تهيئة بينما تُحصل cnf من بنية X509V3_CTX، والتي تُستخدم عادة بواسطة دوال امتداد شهادة X509 v3. يمكن ضبط cnf أو nconf على NULL إذا لم تُستخدم تهيئة إضافية.

تنسيق سلسلة التوليد
تُحدد البيانات الفعلية المُعمّاة بواسطة السلسلة str ومعلومات التهيئة. التنسيق العام للسلسلة هو:

[modifier,]type[:value]

أي صفر أو أكثر من المعدلات المفصولة بفاصلة متبوعة بنوع متبوع بنقطتين اختياريتين وقيمة. تُشرح تنسيقات type وvalue وmodifier أدناه.

  الأنواع المدعومة
تُدرج الأنواع المدعومة أدناه. حالة الأحرف غير مهمة في أسماء الأنواع. ما لم يُحدد خلاف ذلك، يُسمح فقط بتنسيق ASCII.

BOOLEAN، BOOL
    يعمي هذا نوعًا منطقيًا. سلسلة value إلزامية ويجب أن تكون TRUE أو FALSE. بالإضافة إلى ذلك، تُقبل TRUE وtrue وY وy وYES وyes وFALSE وfalse وN وn وNO وno.

NULL
    شفر نوع NULL، سلسلة value يجب ألا تكون موجودة.

INTEGER، INT
    يشفر نوع ASN1 INTEGER. سلسلة value تمثل قيمة العدد الصحيح، يمكن أن تسبقها علامة ناقص وتُفسر عادةً كقيمة عشرية ما لم تُضمن البادئة 0x.

ENUMERATED، ENUM
    يشفر نوع ASN1 ENUMERATED، وهو مطابق لـ INTEGER فيما عدا ذلك.

OBJECT، OID
    يشفر ASN1 OBJECT IDENTIFIER، سلسلة value يمكن أن تكون اسمًا قصيرًا أو اسمًا طويلاً أو تنسيقًا رقميًا.

UTCTIME، UTC
    يشفر بنية ASN1 UTCTime، يجب أن تكون القيمة بالتنسيق YYMMDDHHMMSSZ.

GENERALIZEDTIME، GENTIME
    يشفر بنية ASN1 GeneralizedTime، يجب أن تكون القيمة بالتنسيق YYYYMMDDHHMMSSZ.

OCTETSTRING، OCT
    يشفر ASN1 OCTET STRING. value تمثل محتويات هذه البنية، يمكن استخدام سلاسل التنسيق ASCII و HEX لتحديد تنسيق value.

BITSTRING، BITSTR
    يُعمي سلسلة BIT STRING من ASN1. value يمثل محتويات هذه البنية، ويمكن استخدام سلاسل التنسيق ASCII وHEX وBITLIST لتحديد تنسيق value.

    إذا كان التنسيق غير BITLIST، يُضبط عدد البتات غير المستخدمة إلى صفر.

UNIVERSALSTRING، UNIV، IA5، IA5STRING، UTF8، UTF8String، BMP، BMPSTRING، VISIBLESTRING، VISIBLE، PRINTABLESTRING، PRINTABLE، T61، T61STRING، TELETEXSTRING، GeneralString، NUMERICSTRING، NUMERIC
    تُعمي هذه الأنواع المقابلة من السلاسل. value يمثل محتويات هذه البنية. يمكن أن يكون التنسيق ASCII أو UTF8.

SEQUENCE، SEQ، SET
    يُنسق النتيجة كنوع SEQUENCE أو SET من ASN1. يجب أن يكون value اسم قسم سيحتوي المحتويات. تُتجاهل أسماء الحقول في القسم وتكون القيم بتنسيق السلسلة المُولدة. إذا كان value غائبًا، فسيُعمي SEQUENCE فارغ.

  المعدلات
تؤثر المعدلات على البنية التالية، ويمكن استخدامها لإضافة وسم EXPLICIT أو IMPLICIT، أو إضافة أغلفة، أو تغيير تنسيق السلسلة للنوع والقيمة النهائيين. التنسيقات المدعومة موثقة أدناه.

EXPLICIT، EXP
    أضف وسمًا صريحًا إلى البنية التالية. يجب أن تتبع هذه السلسلة بنقطتين وقيمة الوسم المستخدمة كقيمة عشرية.

    بإتباع الرقم بـ U أو A أو P أو C، يمكن استخدام وسم UNIVERSAL أو APPLICATION أو PRIVATE أو CONTEXT SPECIFIC، المبدئي هو CONTEXT SPECIFIC.

IMPLICIT، IMP
    هذا مماثل لـ EXPLICIT باستثناء استخدام وسم IMPLICIT بدلاً منه.

OCTWRAP، SEQWRAP، SETWRAP، BITWRAP
    تُحاط البنية التالية بـ OCTET STRING أو SEQUENCE أو SET أو BIT STRING على التوالي. بالنسبة لـ BIT STRING، يُضبط عدد البتات غير المستخدمة إلى صفر.

FORMAT
    يحدد هذا تنسيق القيمة النهائية. يجب أن يتبعه نقطتان وأحد السلاسل ASCII أو UTF8 أو HEX أو BITLIST.

    إذا لم يُدرج محدد تنسيق، يُستخدم ASCII. إذا حُدد UTF8، يجب أن تكون سلسلة القيمة سلسلة UTF8 صالحة. بالنسبة لـ HEX، يجب أن يكون الناتج مجموعة من الأرقام السداسية العشرية. BITLIST (الصالح فقط لـ BIT STRING) هو قائمة مفصولة بفواصل لمؤشرات البتات المُعينة، وجميع البتات الأخرى صفر.

القيم المُرجعة
تُرجع ASN1_generate_nconf() و ASN1_generate_v3() البيانات المُرمزة كهيكل ASN1_TYPE أو NULL إذا حدث خطأ.

أكواد الخطأ التي يمكن الحصول عليها بواسطة ERR_get_error(3).

أمثلة
سلسلة IA5String بسيطة:

 IA5STRING:Hello World

سلسلة IA5String موسومة صراحة:

 EXPLICIT:0,IA5STRING:Hello World

سلسلة IA5String موسومة صراحة باستخدام وسوم APPLICATION:

 EXPLICIT:0A,IA5STRING:Hello World

سلسلة BITSTRING مع تعيين البتتين 1 و 5 وجميع البتات الأخرى صفر:

 FORMAT:BITLIST,BITSTRING:1,5

مثال أكثر تعقيدًا باستخدام ملف تهيئة لإنتاج SEQUENCE تتكون من BOOL و OID و UTF8String:

 asn1 = SEQUENCE:seq_section

 [seq_section]

 field1 = BOOLEAN:TRUE
 field2 = OID:commonName
 field3 = UTF8:Third field

ينتج هذا المثال هيكل RSAPrivateKey، وهو المفتاح الموجود في ملف client.pem في جميع توزيعات OpenSSL (ملاحظة: أسماء الحقول مثل 'coeff' تُتجاهل وتُوجد فقط للتوضيح):

 asn1=SEQUENCE:private_key
 [private_key]
 version=INTEGER:0

 n=INTEGER:0xBB6FE79432CC6EA2D8F970675A5A87BFBE1AFF0BE63E879F2AFFB93644\
 D4D2C6D000430DEC66ABF47829E74B8C5108623A1C0EE8BE217B3AD8D36D5EB4FCA1D9

 e=INTEGER:0x010001

 d=INTEGER:0x6F05EAD2F27FFAEC84BEC360C4B928FD5F3A9865D0FCAAD291E2A52F4A\
 F810DC6373278C006A0ABBA27DC8C63BF97F7E666E27C5284D7D3B1FFFE16B7A87B51D

 p=INTEGER:0xF3929B9435608F8A22C208D86795271D54EBDFB09DDEF539AB083DA912\
 D4BD57

 q=INTEGER:0xC50016F89DFF2561347ED1186A46E150E28BF2D0F539A1594BBD7FE467\
 46EC4F

 exp1=INTEGER:0x9E7D4326C924AFC1DEA40B45650134966D6F9DFA3A7F9D698CD4ABEA\
 9C0A39B9

 exp2=INTEGER:0xBA84003BB95355AFB7C50DF140C60513D0BA51D637272E355E397779\
 E7B2458F

 coeff=INTEGER:0x30B9E4F2AFA5AC679F920FC83F1F2DF1BAF1779CF989447FABC2F5\
 628657053A

هذا المثال هو المفتاح العام المقابل في هيكل SubjectPublicKeyInfo:

 # ابدأ بـ SEQUENCE
 asn1=SEQUENCE:pubkeyinfo

 # يحتوي pubkeyinfo على معرف خوارزمية والمفتاح العام المُغلف
 # في BIT STRING
 [pubkeyinfo]
 algorithm=SEQUENCE:rsa_alg
 pubkey=BITWRAP,SEQUENCE:rsapubkey

 # معرف الخوارزمية لـ RSA هو مجرد OID و NULL
 [rsa_alg]
 algorithm=OID:rsaEncryption
 parameter=NULL

 # المفتاح العام الفعلي: المقياس والأس
 [rsapubkey]
 n=INTEGER:0xBB6FE79432CC6EA2D8F970675A5A87BFBE1AFF0BE63E879F2AFFB93644\
 D4D2C6D000430DEC66ABF47829E74B8C5108623A1C0EE8BE217B3AD8D36D5EB4FCA1D9

 e=INTEGER:0x010001

انظر أيضًا
ERR_get_error(3)

حقوق النسخ
حقوق النشر 2002-2021 مؤلفو مشروع OpenSSL. جميع الحقوق محفوظة.

مرخص بموجب رخصة Apache 2.0 (المشار إليها فيما يلي بـ ”الرخصة“). لا يجوز لك استخدام هذا الملف إلا وفقًا لشروط الرخصة. يمكنك الحصول على نسخة منها في الملف LICENSE الموجود في حزمة التوزيع المصدرية أو على الرابط <https://www.openssl.org/source/license.html>.

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.