// Ed25519: توقيع رسالة ببذرة خاصة والتحقق منها بالمفتاح العام.
استورد std.io.println;
استورد std.text.from_bytes;
استورد std.crypto.ed25519;
عرف الرئيسية(): عدد {
دع البذرة: متغير متجه ط8 = [];
دع ف: متغير طبيعي = 0;
طالما (ف < 32) { ألحق(البذرة, (ف * 7) مثل ط8); ف := ف + 1; }
دع الرسالة: متجه ط8 = بايتات_من_نص("ادفع 10 لنور");
دع المزور: متجه ط8 = بايتات_من_نص("ادفع 99 لنور");
طابق مفتاح_عام_إد25519(&البذرة) مع
| اختياري.لا_شيء -> { أرجع 1; }
| اختياري.موجود(المفتاح_العام) -> {
طابق وقع_إد25519(&البذرة, &الرسالة) مع
| اختياري.لا_شيء -> { أرجع 2; }
| اختياري.موجود(التوقيع) -> {
إذا (تحقق_إد25519(&المفتاح_العام, &الرسالة, &التوقيع)) { اطبع_سطر("التوقيع صحيح"); };
إذا (!تحقق_إد25519(&المفتاح_العام, &المزور, &التوقيع)) { اطبع_سطر("رُفض التزوير"); };
};
};
أرجع 0;
}// Ed25519: sign a message with a private seed, verify it with the public key.
import std.io.println;
import std.text.from_bytes;
import std.crypto.ed25519;
def main(): int {
let seed: mutable vector u8 = [];
let i: mutable uint = 0;
while (i < 32) { append(seed, (i * 7) as u8); i := i + 1; }
let message: vector u8 = bytes_from_text("pay 10 to Noor");
let forged: vector u8 = bytes_from_text("pay 99 to Noor");
match ed25519_public_key(&seed) with
| option.none -> { return 1; }
| option.some(public_key) -> {
match ed25519_sign(&seed, &message) with
| option.none -> { return 2; }
| option.some(signature) -> {
if (ed25519_verify(&public_key, &message, &signature)) { println("signature valid"); };
if (!ed25519_verify(&public_key, &forged, &signature)) { println("forgery rejected"); };
};
};
return 0;
}
التشغيل
بالمفسر، دون ترجمة:
./build/sultanc run examples/ar/crypto/signatures.snأو ترجمه إلى ملف تنفيذي:
./build/sultanc examples/ar/crypto/signatures.sn -o build/example && ./build/example