Cairo-তে আপনার সামনে আসা মূল ধারণাগুলোর একটি হলো felt252 টাইপ, যাকে ফিল্ড এলিমেন্ট-ও বলা হয়।
এই টাইপটি একটি বড় মৌলিক সংখ্যা $P$ দ্বারা নির্ধারিত একটি নির্দিষ্ট পরিসরের মধ্যে থাকা ইন্টিজার প্রকাশ করে।
এই অনুশীলনীতে আপনি কেবল felt252 টাইপ নিয়েই কাজ করবেন, যেটি Cairo প্রোগ্রামিংয়ের একটি অপরিহার্য অংশ।
Cairo-তে felt252 টাইপটি একটি স্কেলার টাইপ, যা 0 থেকে $P - 1$ পর্যন্ত ইন্টিজার প্রকাশ করতে ব্যবহৃত হয়, যেখানে $P$ একটি বড় মৌলিক সংখ্যা, যার বর্তমান মান $( 2^{251} + 17 \cdot 2^{192} + 1 )$।
এই টাইপটি নিশ্চিত করে যে সব গাণিতিক অপারেশন মডুলো $P$ হিসেবেই সম্পন্ন হয়, যা এটিকে অন্য প্রোগ্রামিং ভাষায় আপনার দেখা সাধারণ ইন্টিজার টাইপগুলো থেকে আলাদা করে তোলে।
Cairo felt252 মানের উপর মৌলিক গাণিতিক অপারেশনের সুবিধা দেয়:
+): দুটি felt252 মান যোগ করে।
ফলাফল $P$ ছাড়িয়ে গেলে সেটি মডুলো $P$-এ কমানো হয়।-): একটি felt252 মান থেকে আরেকটি বিয়োগ করে।
ফলাফল ঋণাত্মক হলে $P$-এর একটি গুণিতক যোগ করে সেটিকে পরিসরের মধ্যে রেখে সমন্বয় করা হয়।*): দুটি felt252 মান গুণ করে, যেখানে ফলাফল মডুলো $P$ হিসেবেই গণনা করা হয়।/): একটি felt252 মানকে আরেকটি দিয়ে ভাগ করে, যাতে ফলাফলটি $( \frac{x}{y} \cdot y = x \mod P)$ সমীকরণটি মেনে চলে।এই অনুশীলনীতে আপনি একজন ক্রিপ্টোগ্রাফারকে একটি নিরাপদ যোগাযোগ ব্যবস্থা পরিচালনা ও যাচাই করতে সহায়তা করবেন।
সব পাটিগণিত অপারেশন একটি নির্দিষ্ট সীমার মধ্যে রাখতে এই ব্যবস্থাটি মূলত ফিল্ড এলিমেন্টের উপর নির্ভর করে, বিশেষ করে Cairo-র felt252 টাইপের উপর।
দুটি এনক্রিপ্টেড মেসেজ, যার প্রতিটিকে একটি felt252 হিসেবে উপস্থাপন করা হয়, একটি সম্মিলিত মেসেজ তৈরি করতে যোগ করতে হবে।
তবে এনক্রিপশনের কারণে সর্বোচ্চ মান $P - 1$ ছাড়িয়ে যাওয়া যেকোনো ফলাফলকে মডুলো $P$ ব্যবহার করে ঘুরিয়ে আনতে হবে।
এমন একটি ফাংশন তৈরি করুন যা দুটি felt252 মান নেয় এবং তাদের যোগফল রিটার্ন করে, যাতে ফলাফলটি বৈধ সীমার মধ্যে থাকে:
add_messages(3618502788666131213697322783095070105623107215331596699973092056135007822949, 987654321)
// => 123456789
নোট: রিটার্ন ভ্যালুটি একটি
felt252হওয়া উচিত।
কখনও কখনও মূল ডেটা ফিরে পেতে মেসেজগুলো বিয়োগ করতে হয়।
বিয়োগের ফলাফল ঋণাত্মক হলে সিস্টেমটি স্বয়ংক্রিয়ভাবে ফলাফলের সাথে $P$ যোগ করে সেটিকে একটি বৈধ felt252 মানের সীমার মধ্যে ফিরিয়ে আনে।
এমন একটি ফাংশন তৈরি করুন যা দুটি felt252 মান নেয় এবং তাদের পার্থক্য রিটার্ন করে, যাতে ফলাফলটি বৈধ সীমার মধ্যে থাকে:
subtract_messages(123456789, 987654321)
// => 3618502788666131213697322783095070105623107215331596699973092056135007822949
নোট: রিটার্ন ভ্যালুটি একটি
felt252হওয়া উচিত।
এনক্রিপ্টেড ডেটার অখণ্ডতা নিশ্চিত করতে ক্রিপ্টোগ্রাফিক সিস্টেমটি প্রায়ই দুটি মেসেজ (felt252) গুণ করে, যাতে তাদের গুণফল একটি বৈধ সীমার মধ্যে থাকে।
ফলাফলটি বৈধ সীমার মধ্যে আছে কি না তা নিশ্চিত করতে সেটি মডুলো $P$ হিসাব করে বের করতে হবে।
এমন একটি ফাংশন তৈরি করুন যা দুটি felt252 মান নেয় এবং তাদের গুণফল রিটার্ন করে, যাতে ফলাফলটি বৈধ সীমার মধ্যে থাকে:
multiply_messages(382927772233671078546147897004315551461400594453673204174697055647611, 9449570)
// => 123456789
নোট: রিটার্ন ভ্যালুটি একটি
felt252হওয়া উচিত।
Exercism-এ সাইন আপ করুন, Cairo ট্র্যাকের 25টি কনসেপ্ট68টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।