السلطان
  1. الرئيسية
  2. الأمثلة
  3. التشفير

ChaCha20-Poly1305

تشفير وتوثيق ثم فك؛ والعبث يُكتشف.

crypto/encryption.sn
// ChaCha20-Poly1305: تشفير وتوثيق ثم فك؛ والعبث يُكتشف.
استورد std.io.println;
استورد std.text.number;
استورد std.text.from_bytes;
استورد std.crypto.chacha20_poly1305;

عرف الرئيسية(): عدد {
    دع المفتاح: متغير متجه ط8 = [];
    دع ف: متغير طبيعي = 0;
    طالما (ف < 32) { ألحق(المفتاح, (ف + 1) مثل ط8); ف := ف + 1; }
    دع النونس: متجه ط8 = [0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8];
    دع الترويسة: متجه ط8 = بايتات_من_نص("v1");
    دع السر: متجه ط8 = بايتات_من_نص("نلتقي ظهرا");
    دع المختوم: متغير متجه ط8 = اختم_تشاتشا20_بولي1305(&المفتاح, &النونس, &الترويسة, &السر);
    اطبع_سطر(طبيعي_إلى_نص(الطول(المختوم) مثل طبيعي));
    طابق افتح_تشاتشا20_بولي1305(&المفتاح, &النونس, &الترويسة, &المختوم) مع
    | اختياري.موجود(الصريح) -> { اطبع_سطر(من_بايتات(&الصريح)); }
    | اختياري.لا_شيء -> { اطبع_سطر("فشل التحقق"); };
    المختوم[0] := المختوم[0] ^ 1;
    طابق افتح_تشاتشا20_بولي1305(&المفتاح, &النونس, &الترويسة, &المختوم) مع
    | اختياري.موجود(_) -> { اطبع_سطر("لم يُكتشف العبث"); }
    | اختياري.لا_شيء -> { اطبع_سطر("اكتُشف العبث"); };
    أرجع 0;
}

التشغيل

بالمفسر، دون ترجمة:

./build/sultanc run examples/ar/crypto/encryption.sn

أو ترجمه إلى ملف تنفيذي:

./build/sultanc examples/ar/crypto/encryption.sn -o build/example && ./build/example

المصدر على GitHub   كل الأمثلة