<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sharan Biradar</title>
    <description>The latest articles on DEV Community by Sharan Biradar (@sharan_biradar_071).</description>
    <link>https://dev.to/sharan_biradar_071</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3782960%2F76bbb86c-e843-431f-921f-4a2c19bbfaaf.jpg</url>
      <title>DEV Community: Sharan Biradar</title>
      <link>https://dev.to/sharan_biradar_071</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sharan_biradar_071"/>
    <language>en</language>
    <item>
      <title>AES Cipher Encryption &amp; Decryption with Example</title>
      <dc:creator>Sharan Biradar</dc:creator>
      <pubDate>Mon, 23 Mar 2026 20:34:43 +0000</pubDate>
      <link>https://dev.to/sharan_biradar_071/aes-cipher-encryption-decryption-with-example-3f11</link>
      <guid>https://dev.to/sharan_biradar_071/aes-cipher-encryption-decryption-with-example-3f11</guid>
      <description>&lt;p&gt;&lt;strong&gt;AES Cipher&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;(AES) is a symmetric encryption algorithm that converts plaintext (readable text) into ciphertext (unreadable text) using a secret key.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. INPUTS&lt;/strong&gt;&lt;br&gt;
Plaintext (ASCII → Hex)&lt;br&gt;
"Password Rama41S" &lt;br&gt;
plain text in Hex-&amp;gt;50 61 73 73 77 6F 72 64 20 52 61 6D 61 34 31 53&lt;/p&gt;

&lt;p&gt;Key&lt;br&gt;
"Tanav Bank Accnt"&lt;br&gt;
Key in Hex-&amp;gt;54 61 6E 61 76 20 42 61 6E 6B 20 41 63 63 6E 74&lt;/p&gt;

&lt;p&gt;AES-128 requires 16-byte plaintext and 16-byte key.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. AES STATE (Column-wise)&lt;/strong&gt;&lt;br&gt;
Plaintext State&lt;br&gt;
[ 50 77 20 61 &lt;br&gt;
  61 6F 52 34&lt;br&gt;
  73 72 61 31&lt;br&gt;
  73 64 6D 53]&lt;/p&gt;

&lt;p&gt;Key State (K₀)&lt;br&gt;
[ 54 76 6E 63&lt;br&gt;
  61 20 6B 63&lt;br&gt;
  6E 42 20 6E &lt;br&gt;
  61 61 41 74]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.  Steps performed for encryption&lt;/strong&gt;&lt;br&gt;
Plaintext&lt;br&gt;
│&lt;br&gt;
▼&lt;br&gt;
Initial AddRoundKey&lt;br&gt;
│&lt;br&gt;
▼&lt;br&gt;
Round 1&lt;br&gt;
SubBytes → ShiftRows → MixColumns → AddRoundKey&lt;br&gt;
│&lt;br&gt;
▼&lt;br&gt;
Round 2&lt;br&gt;
SubBytes → ShiftRows → MixColumns → AddRoundKey&lt;br&gt;
│&lt;br&gt;
▼&lt;br&gt;
Round 3&lt;br&gt;
SubBytes → ShiftRows → MixColumns → AddRoundKey&lt;br&gt;
│&lt;br&gt;
▼&lt;br&gt;
Round 4&lt;br&gt;
SubBytes → ShiftRows → MixColumns → AddRoundKey&lt;br&gt;
│&lt;br&gt;
▼&lt;br&gt;
Round 5&lt;br&gt;
SubBytes → ShiftRows → MixColumns → AddRoundKey&lt;br&gt;
│&lt;br&gt;
▼&lt;br&gt;
Round 6&lt;br&gt;
SubBytes → ShiftRows → MixColumns → AddRoundKey&lt;br&gt;
│&lt;br&gt;
▼&lt;br&gt;
Round 7&lt;br&gt;
SubBytes → ShiftRows → MixColumns → AddRoundKey&lt;br&gt;
│&lt;br&gt;
▼&lt;br&gt;
Round 8&lt;br&gt;
SubBytes → ShiftRows → MixColumns → AddRoundKey&lt;br&gt;
│&lt;br&gt;
▼&lt;br&gt;
Round 9&lt;br&gt;
SubBytes → ShiftRows → MixColumns → AddRoundKey&lt;br&gt;
│&lt;br&gt;
▼&lt;br&gt;
Round 10&lt;br&gt;
SubBytes → ShiftRows → AddRoundKey&lt;br&gt;
│&lt;br&gt;
▼&lt;br&gt;
Ciphertext&lt;/p&gt;

&lt;p&gt;Important: Round 10 does NOT include MixColumns.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4.KEY EXPANSION&lt;/strong&gt;&lt;br&gt;
Each round uses 16 bytes:&lt;br&gt;
In each round Key expansion will be used.&lt;br&gt;
Lets understand AES Key Expansion.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg2dncosugfvdrq7ijmud.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg2dncosugfvdrq7ijmud.png" alt=" " width="800" height="765"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Steps:&lt;br&gt;
 In each round of Key expansion take the last column for g function calculation,&lt;br&gt;
• RotWord − This function rotates the bytes in a word.&lt;br&gt;
• SubWord − Applies a substitution operation using a predetermined S-box.&lt;br&gt;
• Rcon − XORs the word using a round constant.&lt;/p&gt;

&lt;p&gt;The Rcon constant table is:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpkxm7ews2bfedghx79l8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpkxm7ews2bfedghx79l8.png" alt=" " width="670" height="284"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In Round1, we need to calculate – W4,W5,W6,W7&lt;br&gt;
In Round2, we need to calculate – W8,W9,W10,W11&lt;br&gt;
In Round3, we need to calculate – W12,W13,W14,W15&lt;br&gt;
In Round4, we need to calculate – W16,W17,W18,W19&lt;br&gt;
In Round5, we need to calculate – W20,W21,W22,W23&lt;br&gt;
so on...&lt;/p&gt;

&lt;p&gt;In Round10, we need to calculate – W44,W45,W46,W47&lt;/p&gt;

&lt;p&gt;We will see details in each round how to calculate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;K0 (Input Key)&lt;/strong&gt;&lt;br&gt;
The key given is considered as K0&lt;br&gt;
54 76 6E 63&lt;br&gt;
61 20 6B 63&lt;br&gt;
6E 42 20 6E&lt;br&gt;
61 61 41 74&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;K1&lt;/strong&gt;&lt;br&gt;
Let’s me explain details for K1 so that same steps will be followed for other keys calculation.&lt;br&gt;
Find K₁ = (w4, w5, w6, w7)&lt;br&gt;
Find w₄&lt;br&gt;
Formula:&lt;br&gt;
w4 = w0 ⊕ SubWord(RotWord(w3)) ⊕ Rcon₁&lt;/p&gt;

&lt;p&gt;Step 1A: RotWord(w₃)&lt;br&gt;
Take w3 = [61 61 41 74]&lt;br&gt;
Rotate upwards (left circular shift):→ [61 41 74 61]&lt;/p&gt;

&lt;p&gt;Step 1B: SubWord (S-box substitution)&lt;br&gt;
Replace each byte using AES S-box:&lt;br&gt;
61 → EF&lt;br&gt;
41 → 83&lt;br&gt;
74 → 92&lt;br&gt;
61 → EF&lt;br&gt;
Result:[EF 83 92 EF]&lt;/p&gt;

&lt;p&gt;Step 1C: Add Rcon₁&lt;br&gt;
Rcon₁:[01 00 00 00]&lt;br&gt;
XOR:&lt;br&gt;
EF ⊕ 01 = EE&lt;br&gt;
83 ⊕ 00 = 83&lt;br&gt;
92 ⊕ 00 = 92&lt;br&gt;
EF ⊕ 00 = EF&lt;br&gt;
Result:[EE 83 92 EF]&lt;/p&gt;

&lt;p&gt;Step 1D: XOR with w₀&lt;br&gt;
w0 = [54 76 6E 63]&lt;br&gt;
Now XOR:&lt;br&gt;
54 ⊕ EE = BA&lt;br&gt;
76 ⊕ 83 = F5&lt;br&gt;
6E ⊕ 92 = FC&lt;br&gt;
63 ⊕ EF = 8C&lt;/p&gt;

&lt;p&gt;w₄ =BA F5 FC 8C&lt;br&gt;
w5 = w1 ⊕ w4&lt;br&gt;
w1 = [61 20 6B 63]&lt;br&gt;
w4 = [BA F5 FC 8C]&lt;br&gt;
XOR:&lt;br&gt;
61 ⊕ BA = DB&lt;br&gt;
20 ⊕ F5 = D5&lt;br&gt;
6B ⊕ FC = 97&lt;br&gt;
63 ⊕ 8C = EF&lt;br&gt;
w₅ =DB D5 97 EF&lt;/p&gt;

&lt;p&gt;Find w₆&lt;br&gt;
w6 = w2 ⊕ w5&lt;br&gt;
w2 = [6E 42 20 6E]&lt;br&gt;
w5 = [DB D5 97 EF]&lt;br&gt;
XOR:&lt;br&gt;
6E ⊕ DB = B5&lt;br&gt;
42 ⊕ D5 = 97&lt;br&gt;
20 ⊕ 97 = B7&lt;br&gt;
6E ⊕ EF = 81&lt;/p&gt;

&lt;p&gt;w₆ =B5 97 B7 81&lt;br&gt;
Find w₇&lt;br&gt;
w7 = w3 ⊕ w6&lt;br&gt;
w3 = [61 61 41 74]&lt;br&gt;
w6 = [B5 97 B7 81]&lt;br&gt;
XOR:&lt;br&gt;
61 ⊕ B5 = D4&lt;br&gt;
61 ⊕ 97 = F6&lt;br&gt;
41 ⊕ B7 = F6&lt;br&gt;
74 ⊕ 81 = F5&lt;br&gt;
w₇ = D4 F6 F6 F5&lt;/p&gt;

&lt;p&gt;FINAL ANSWER: ROUND KEY K₁&lt;br&gt;
Combine w₄, w₅, w₆, w₇:&lt;br&gt;
K1 =&lt;br&gt;
BA DB B5 D4&lt;br&gt;
F5 D5 97 F6&lt;br&gt;
FC 97 B7 F6&lt;br&gt;
8C EF 81 F5&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;K2&lt;/strong&gt;&lt;br&gt;
We already have&lt;br&gt;
w4 = BA F5 FC 8C&lt;br&gt;
w5 = DB D5 97 EF&lt;br&gt;
w6 = B5 97 B7 81&lt;br&gt;
w7 = D4 F6 F6 F5&lt;/p&gt;

&lt;p&gt;K₂ Calculation (w₈–w₁₁)&lt;br&gt;
Step 1: Compute w₈&lt;br&gt;
RotWord(w₇)&lt;br&gt;
w7 = D4 F6 F6 F5&lt;br&gt;
→ F6 F6 F5 D4&lt;/p&gt;

&lt;p&gt;SubWord&lt;br&gt;
F6 → 42&lt;br&gt;
F6 → 42&lt;br&gt;
F5 → E6&lt;br&gt;
D4 → 48&lt;br&gt;
= 42 42 E6 48&lt;/p&gt;

&lt;p&gt;XOR with Rcon₂&lt;br&gt;
Rcon₂ = 02 00 00 00&lt;/p&gt;

&lt;p&gt;42 ⊕ 02 = 40&lt;br&gt;
= 40 42 E6 48&lt;/p&gt;

&lt;p&gt;XOR with w₄&lt;br&gt;
40 ⊕ BA = FA&lt;br&gt;
42 ⊕ F5 = B7&lt;br&gt;
E6 ⊕ FC = 1A&lt;br&gt;
48 ⊕ 8C = C4&lt;/p&gt;

&lt;p&gt;w₈ = FA B7 1A C4&lt;/p&gt;

&lt;p&gt;w₉ = w₈ ⊕ w₅&lt;br&gt;
FA ⊕ DB = 21&lt;br&gt;
B7 ⊕ D5 = 62&lt;br&gt;
1A ⊕ 97 = 8D&lt;br&gt;
C4 ⊕ EF = 2B&lt;br&gt;
w₉ = 21 62 8D 2B&lt;/p&gt;

&lt;p&gt;w₁₀ = w₉ ⊕ w₆&lt;br&gt;
21 ⊕ B5 = 94&lt;br&gt;
62 ⊕ 97 = F5&lt;br&gt;
8D ⊕ B7 = 3A&lt;br&gt;
2B ⊕ 81 = AA&lt;br&gt;
w₁₀ = 94 F5 3A AA&lt;/p&gt;

&lt;p&gt;w₁₁ = w₁₀ ⊕ w₇&lt;br&gt;
94 ⊕ D4 = 40&lt;br&gt;
F5 ⊕ F6 = 03&lt;br&gt;
3A ⊕ F6 = CC&lt;br&gt;
AA ⊕ F5 = 5F&lt;br&gt;
w₁₁ = 40 03 CC 5F&lt;/p&gt;

&lt;p&gt;✅ K₂&lt;br&gt;
[FA 21 94 40&lt;br&gt;
 B7 62 F5 03&lt;br&gt;
 1A 8D 3A CC&lt;br&gt;
 C4 2B AA 5F]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;K₃ Calculation (w₁₂–w₁₅)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;w₁₂&lt;br&gt;
RotWord(w₁₁)&lt;br&gt;
40 03 CC 5F → 03 CC 5F 40&lt;/p&gt;

&lt;p&gt;SubWord&lt;br&gt;
03 → 7B&lt;br&gt;
CC → 4B&lt;br&gt;
5F → CF&lt;br&gt;
40 → 09&lt;br&gt;
= 7B 4B CF 09&lt;/p&gt;

&lt;p&gt;XOR with Rcon₃&lt;br&gt;
Rcon₃ = 04 00 00 00&lt;/p&gt;

&lt;p&gt;7B ⊕ 04 = 7F&lt;br&gt;
= 7F 4B CF 09&lt;/p&gt;

&lt;p&gt;XOR with w₈&lt;br&gt;
7F ⊕ FA = 85&lt;br&gt;
4B ⊕ B7 = FC&lt;br&gt;
CF ⊕ 1A = D5&lt;br&gt;
09 ⊕ C4 = CD&lt;/p&gt;

&lt;p&gt;w₁₂ = 85 FC D5 CD&lt;/p&gt;

&lt;p&gt;w₁₃ = w₁₂ ⊕ w₉&lt;br&gt;
85 ⊕ 21 = A4&lt;br&gt;
FC ⊕ 62 = 9E&lt;br&gt;
D5 ⊕ 8D = 58&lt;br&gt;
CD ⊕ 2B = E6&lt;br&gt;
w₁₃ = A4 9E 58 E6&lt;/p&gt;

&lt;p&gt;w₁₄ = w₁₃ ⊕ w₁₀&lt;br&gt;
A4 ⊕ 94 = 30&lt;br&gt;
9E ⊕ F5 = 6B&lt;br&gt;
58 ⊕ 3A = 62&lt;br&gt;
E6 ⊕ AA = 4C&lt;br&gt;
w₁₄ = 30 6B 62 4C&lt;/p&gt;

&lt;p&gt;w₁₅ = w₁₄ ⊕ w₁₁&lt;br&gt;
30 ⊕ 40 = 70&lt;br&gt;
6B ⊕ 03 = 68&lt;br&gt;
62 ⊕ CC = AE&lt;br&gt;
4C ⊕ 5F = 13&lt;br&gt;
w₁₅ = 70 68 AE 13&lt;/p&gt;

&lt;p&gt;✅ K₃&lt;br&gt;
[85 A4 30 70&lt;br&gt;
 FC 9E 6B 68&lt;br&gt;
 D5 58 62 AE&lt;br&gt;
 CD E6 4C 13]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;K₄ Calculation (w₁₆–w₁₉)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;✅ K₄&lt;br&gt;
[C8 6C 5C 2C&lt;br&gt;
 18 86 ED 85&lt;br&gt;
 A8 F0 92 3C&lt;br&gt;
 9C 7A 36 25]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;K5&lt;/strong&gt;&lt;br&gt;
We already have&lt;br&gt;
w16 = C8 18 A8 9C&lt;br&gt;
w17 = 6C 86 F0 7A&lt;br&gt;
w18 = 5C ED 92 36&lt;br&gt;
w19 = 2C 85 3C 25&lt;/p&gt;

&lt;p&gt;✅ Final K₅&lt;br&gt;
[4F 23 7F 53&lt;br&gt;
 F3 75 98 1D&lt;br&gt;
 97 67 F5 C9&lt;br&gt;
 ED 97 A1 84]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;K6&lt;/strong&gt;&lt;br&gt;
We already have (from K₅)&lt;br&gt;
w20 = 4F F3 97 ED&lt;br&gt;
w21 = 23 75 67 97&lt;br&gt;
w22 = 7F 98 F5 A1&lt;br&gt;
w23 = 53 1D C9 84&lt;/p&gt;

&lt;p&gt;✅ Final K₆&lt;br&gt;
[CB E8 97 C4&lt;br&gt;
 2E 5B C3 DE&lt;br&gt;
 C8 AF 5A 93&lt;br&gt;
 00 97 36 B2]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;K7&lt;/strong&gt;&lt;br&gt;
We already have (from K₆)&lt;br&gt;
w24 = CB 2E C8 00&lt;br&gt;
w25 = E8 5B AF 97&lt;br&gt;
w26 = 97 C3 5A 36&lt;/p&gt;

&lt;p&gt;✅ Final K₇&lt;br&gt;
[96 7E E9 2D&lt;br&gt;
 F2 A9 6A B4&lt;br&gt;
 FF 50 0A 99&lt;br&gt;
 1C 8B BD 0F]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;K8&lt;/strong&gt;&lt;br&gt;
K₈&lt;br&gt;
[9B E5 0C 21&lt;br&gt;
 1C B5 DF 6B&lt;br&gt;
 89 D9 D3 4A&lt;br&gt;
 C4 4F F2 FD] &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;K9&lt;/strong&gt;&lt;br&gt;
K₉&lt;br&gt;
[FF 1A 16 37&lt;br&gt;
 CA 7F A0 CB&lt;br&gt;
 DD 04 D7 9D&lt;br&gt;
 39 76 84 79]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;K10&lt;/strong&gt;&lt;br&gt;
K₁₀ (Correct Final Round Key)&lt;br&gt;
[D6 CC DA ED&lt;br&gt;
 94 EB 4B 80&lt;br&gt;
 6B 6F B8 25 &lt;br&gt;
 A3 D5 51 28]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5.ENCRYPTION ROUNDS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Round 0 (AddRoundKey)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We have message (plaintext) &lt;br&gt;
We have a secret key &lt;br&gt;
We mix them together using XOR to hide the message &lt;br&gt;
This is the first layer of security&lt;/p&gt;

&lt;p&gt;Plaintext Matrix&lt;br&gt;
[ 50 77 20 61 &lt;br&gt;
  61 6F 52 34&lt;br&gt;
  73 72 61 31&lt;br&gt;
  73 64 6D 53]&lt;/p&gt;

&lt;p&gt;Key Matrix (K₀)&lt;br&gt;
[ 54 76 6E 63&lt;br&gt;
  61 20 6B 63&lt;br&gt;
  6E 42 20 6E &lt;br&gt;
  61 61 41 74]&lt;/p&gt;

&lt;p&gt;Perform XOR&lt;br&gt;
Row 1:&lt;br&gt;
50 ⊕ 54 = 04&lt;br&gt;
77 ⊕ 76 = 01&lt;br&gt;
20 ⊕ 6E = 4E&lt;br&gt;
61 ⊕ 63 = 02&lt;br&gt;
Row 2:&lt;br&gt;
61 ⊕ 61 = 00&lt;br&gt;
6F ⊕ 20 = 4F&lt;br&gt;
52 ⊕ 6B = 39&lt;br&gt;
34 ⊕ 63 = 57&lt;br&gt;
Row 3:&lt;br&gt;
73 ⊕ 6E = 1D&lt;br&gt;
72 ⊕ 42 = 30&lt;br&gt;
61 ⊕ 20 = 41&lt;br&gt;
31 ⊕ 6E = 5F&lt;br&gt;
Row 4:&lt;br&gt;
73 ⊕ 61 = 12&lt;br&gt;
64 ⊕ 61 = 05&lt;br&gt;
6D ⊕ 41 = 2C&lt;br&gt;
53 ⊕ 74 = 27&lt;/p&gt;

&lt;p&gt;Final Output of Round 0&lt;br&gt;
[04 01 4E 02&lt;br&gt;
 00 4F 39 57&lt;br&gt;
 1D 30 41 5F&lt;br&gt;
 12 05 2C 27]&lt;/p&gt;

&lt;p&gt;Rounds 1 → 9&lt;br&gt;
Each round:&lt;br&gt;
SubBytes → ShiftRows → MixColumns → AddRoundKey&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Round 1&lt;/strong&gt;&lt;br&gt;
Starting Point (Output of Round 0)&lt;br&gt;
[04 01 4E 02&lt;br&gt;
 00 4F 39 57&lt;br&gt;
 1D 30 41 5F&lt;br&gt;
 12 05 2C 27]&lt;/p&gt;

&lt;p&gt;Round 1 has 4 steps&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;SubBytes&lt;/li&gt;
&lt;li&gt;ShiftRows&lt;/li&gt;
&lt;li&gt;MixColumns&lt;/li&gt;
&lt;li&gt;AddRoundKey&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Round1 Step 1: SubBytes (Replace each value)&lt;/strong&gt;&lt;br&gt;
Each number is replaced using a fixed table (S-box)&lt;br&gt;
→ Like converting each letter using a secret dictionary&lt;/p&gt;

&lt;p&gt;&lt;em&gt;S-box value selection:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AES defines a 16 x 16 matrix of byte values, called an S-box
&lt;/li&gt;
&lt;li&gt;S-Box contains a permutation of all possible 256 8-bit values&lt;/li&gt;
&lt;li&gt;Mapping: The leftmost 4 bits of the byte are used as a row value and the rightmost 4 bits are used as a column value.
These row and column values serve as indexes into the S-box to select a unique 8-bit output value.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8jz8aefybr003wjuwdpf.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8jz8aefybr003wjuwdpf.jpg" alt=" " width="470" height="466"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
04 → F2&lt;br&gt;
01 → 7C&lt;br&gt;
4E → 2F&lt;br&gt;
02 → 77&lt;/p&gt;

&lt;p&gt;Applying to all:&lt;br&gt;
[F2 7C 2F 77&lt;br&gt;
 63 84 12 5B&lt;br&gt;
 A4 04 83 CF&lt;br&gt;
 C9 6B 71 CC]&lt;br&gt;
Purpose:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Makes the data non-linear&lt;/li&gt;
&lt;li&gt;Prevents simple patterns in encryption.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Round1 Step 2: ShiftRows (Shuffle rows)&lt;/strong&gt;&lt;br&gt;
Each row is shifted left to mix positions&lt;br&gt;
Rule:&lt;br&gt;
Row 0 → no shift&lt;br&gt;&lt;br&gt;
Row 1 → shift left by 1&lt;br&gt;&lt;br&gt;
Row 2 → shift left by 2&lt;br&gt;&lt;br&gt;
Row 3 → shift left by 3  &lt;/p&gt;

&lt;p&gt;Result:&lt;br&gt;
[F2 7C 2F 77&lt;br&gt;
 84 12 5B 63&lt;br&gt;
 83 CF A4 04&lt;br&gt;
 CC C9 6B 71]&lt;/p&gt;

&lt;p&gt;Purpose:&lt;br&gt;
Spread the bytes so columns start mixing with each other.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Round1 Step 3: MixColumns (Mix each column)&lt;/strong&gt;&lt;br&gt;
Each column is mixed mathematically&lt;br&gt;
→ Like blending colors so you can't separate them easily&lt;br&gt;
Each byte of a column is mapped into a new value that is a function of all four bytes in that column.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F07lu8f6mnktpyg3yswlw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F07lu8f6mnktpyg3yswlw.png" alt=" " width="800" height="255"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Equation is:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8wmpew8cy7zyz0pyplt5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8wmpew8cy7zyz0pyplt5.png" alt=" " width="800" height="228"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We take each column separately&lt;br&gt;
Multiply pre-defined matrix and previous output &lt;/p&gt;

&lt;p&gt;🔸 Example: First Column&lt;br&gt;
Column:&lt;br&gt;
[F2, 84, 83, CC]&lt;br&gt;
We apply AES formula:&lt;br&gt;
S’0,0 = (2×F2) ⊕ (3×84) ⊕ 83 ⊕ CC&lt;br&gt;
S’1,0 = F2 ⊕ (2×84) ⊕ (3×83) ⊕ CC&lt;br&gt;
S’2,0 = F2 ⊕ 84 ⊕ (2×83) ⊕ (3×CC)&lt;br&gt;
S’3,0 = (3×F2) ⊕ 84 ⊕ 83 ⊕ (2×CC)&lt;br&gt;
AES does NOT use normal multiplication.&lt;br&gt;
It uses a special system called GF(2⁸).&lt;/p&gt;

&lt;p&gt;Understand Multiply by 2 Rule:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Convert to binary&lt;/li&gt;
&lt;li&gt;Shift left (×2)&lt;/li&gt;
&lt;li&gt;If first bit was 1 → XOR with 1B&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Multiply by 3 Rule:&lt;br&gt;
3 × a = (2 × a) XOR a&lt;/p&gt;

&lt;p&gt;2 × F2&lt;br&gt;
Step 1: Convert F2 to binary&lt;br&gt;
F2 = 11110010&lt;br&gt;
Step 2: Left shift&lt;br&gt;
11110010 → 11100100&lt;br&gt;
Step 3: Check first bit&lt;br&gt;
    Original first bit = 1 → so we must fix &lt;br&gt;
Step 4: XOR with 1B&lt;br&gt;
11100100 XOR 00011011&lt;br&gt;
Result is&lt;br&gt;
11111111 = FF&lt;/p&gt;

&lt;p&gt;Final 2 × F2 = FF&lt;/p&gt;

&lt;p&gt;Calculate 3 × 84:&lt;br&gt;
This can be written as 2 x 84 ⊕ 84 as per multiply by 3 Rule &lt;br&gt;
Find 2×84&lt;br&gt;
84 = 10000100&lt;br&gt;
Shift:&lt;br&gt;
10000100 → 00001000&lt;br&gt;
First bit was 1 → XOR 1B:&lt;br&gt;
00001000 XOR 00011011&lt;br&gt;
Result is&lt;br&gt;
00010011 = 13&lt;br&gt;
So:&lt;br&gt;
2 × 84 = 13&lt;/p&gt;

&lt;p&gt;Step 2: XOR with original&lt;br&gt;
13 ⊕ 84 = 97&lt;br&gt;
✅ Final: 3 × 84 = 97&lt;/p&gt;

&lt;p&gt;Precompute:&lt;br&gt;
2×F2 = FF&lt;br&gt;
3×F2 = FF ⊕ F2 = 0D&lt;/p&gt;

&lt;p&gt;2×84 = 13&lt;br&gt;
3×84 = 13 ⊕ 84 = 97&lt;/p&gt;

&lt;p&gt;2×83 = 1D&lt;br&gt;
3×83 = 1D ⊕ 83 = 9E&lt;/p&gt;

&lt;p&gt;2×CC = 83&lt;br&gt;
3×CC = 83 ⊕ CC = 4F&lt;/p&gt;

&lt;p&gt;Now Apply to Your Column&lt;br&gt;
Column:&lt;br&gt;
[F2, 84, 83, CC]&lt;/p&gt;

&lt;p&gt;First Output Value&lt;br&gt;
Formula:&lt;br&gt;
(2×F2) ⊕ (3×84) ⊕ 83 ⊕ CC&lt;br&gt;
Step-by-step: ✔️ 2×F2 = FF  (from above)&lt;br&gt;
✔️ 3×84 = 97  (from above)&lt;br&gt;
Now XOR all:&lt;br&gt;
FF ⊕ 97 = 68&lt;br&gt;
68 ⊕ 83 = EB&lt;br&gt;
EB ⊕ CC = 27&lt;br&gt;
Now compute:&lt;br&gt;
Row1 = FF ⊕ 97 ⊕ 83 ⊕ CC = 27&lt;br&gt;
Row2 = F2 ⊕ 13 ⊕ 9E ⊕ CC = B3&lt;br&gt;
Row3 = F2 ⊕ 84 ⊕ 1D ⊕ 4F = 24&lt;br&gt;
Row4 = 0D ⊕ 84 ⊕ 83 ⊕ 83 = 8D&lt;br&gt;
Column 1 result:&lt;br&gt;
[27, B3, 24, 8D]&lt;/p&gt;

&lt;p&gt;COLUMN 2: [7C, 12, CF, C9]&lt;br&gt;
Precompute:&lt;br&gt;
2×7C = F8     3×7C = 84&lt;br&gt;
2×12 = 24     3×12 = 36&lt;br&gt;
2×CF = 85     3×CF = 4A&lt;br&gt;
2×C9 = 89     3×C9 = 40&lt;/p&gt;

&lt;p&gt;Compute:&lt;br&gt;
Row1 = F8 ⊕ 36 ⊕ CF ⊕ C9 = C8&lt;br&gt;
Row2 = 7C ⊕ 24 ⊕ 4A ⊕ C9 = DB&lt;br&gt;
Row3 = 7C ⊕ 12 ⊕ 85 ⊕ 40 = AB&lt;br&gt;
Row4 = 84 ⊕ 12 ⊕ CF ⊕ 89 = D0&lt;/p&gt;

&lt;p&gt;✅ Column 2 result:&lt;br&gt;
[C8, DB, AB, D0]&lt;/p&gt;

&lt;p&gt;🔹 COLUMN 3: [2F, 5B, A4, 6B]&lt;br&gt;
Precompute:&lt;br&gt;
2×2F = 5E     3×2F = 71&lt;br&gt;
2×5B = B6     3×5B = ED&lt;br&gt;
2×A4 = 53     3×A4 = F7&lt;br&gt;
2×6B = D6     3×6B = BD&lt;/p&gt;

&lt;p&gt;Compute:&lt;br&gt;
Row1 = 5E ⊕ ED ⊕ A4 ⊕ 6B = 7C&lt;br&gt;
Row2 = 2F ⊕ B6 ⊕ F7 ⊕ 6B = 05&lt;br&gt;
Row3 = 2F ⊕ 5B ⊕ 53 ⊕ BD = 9A&lt;br&gt;
Row4 = 71 ⊕ 5B ⊕ A4 ⊕ D6 = 58&lt;/p&gt;

&lt;p&gt;✅ Column 3 result:&lt;br&gt;
[7C, 05, 9A, 58]&lt;/p&gt;

&lt;p&gt;🔹 COLUMN 4: [77, 63, 04, 71]&lt;br&gt;
Precompute:&lt;br&gt;
2×77 = EE     3×77 = 99&lt;br&gt;
2×63 = C6     3×63 = A5&lt;br&gt;
2×04 = 08     3×04 = 0C&lt;br&gt;
2×71 = E2     3×71 = 93&lt;br&gt;
Compute:&lt;br&gt;
Row1 = EE ⊕ A5 ⊕ 04 ⊕ 71 = 3E&lt;br&gt;
Row2 = 77 ⊕ C6 ⊕ 0C ⊕ 71 = CC&lt;br&gt;
Row3 = 77 ⊕ 63 ⊕ 08 ⊕ 93 = 8F&lt;br&gt;
Row4 = 99 ⊕ 63 ⊕ 04 ⊕ E2 = 1C&lt;br&gt;
✅ Column 4 result:&lt;br&gt;
[3E, CC, 8F, 1C]&lt;/p&gt;

&lt;p&gt;FINAL MixColumns OUTPUT&lt;br&gt;
[27 C8 7C 3E&lt;br&gt;
 B3 DB 05 CC&lt;br&gt;
 24 AB 9A 8F&lt;br&gt;
 8D D0 58 1C]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Round1 Step 4:&lt;/strong&gt; AddRoundKey (XOR with K₁)&lt;br&gt;
Mix with new key again (like Round 0)&lt;/p&gt;

&lt;p&gt;Input to this round is previous round output:&lt;br&gt;
27 C8 7C 3E&lt;br&gt;
B3 DB 05 CC &lt;br&gt;
24 AB 9A 8F&lt;br&gt;
8D D0 58 1C&lt;/p&gt;

&lt;p&gt;K₁ (from key expansion)&lt;br&gt;
[BA DB B5 D4&lt;br&gt;
 F5 D5 97 F6&lt;br&gt;
 FC 97 B7 F6&lt;br&gt;
 8C EF 81 F5]&lt;/p&gt;

&lt;p&gt;Step 1: Row 1&lt;br&gt;
MixCol  Key XOR Result&lt;br&gt;
27  BA  9D&lt;br&gt;
C8  DB  13&lt;br&gt;
7C  B5  C9&lt;br&gt;
3E  D4  EA&lt;/p&gt;

&lt;p&gt;Step 2: Row 2&lt;br&gt;
MixCol  Key XOR Result&lt;br&gt;
B3  F5  46&lt;br&gt;
DB  D5  0E&lt;br&gt;
05  97  92&lt;br&gt;
CC  F6  3A&lt;/p&gt;

&lt;p&gt;Step 3: Row 3&lt;br&gt;
MixCol  Key XOR Result&lt;br&gt;
24  FC  D8&lt;br&gt;
AB  97  3C&lt;br&gt;
9A  B7  2D&lt;br&gt;
58  F6  AE&lt;/p&gt;

&lt;p&gt;Step 4: Row 4&lt;br&gt;
MixCol  Key XOR Result&lt;br&gt;
8D  8C  01&lt;br&gt;
D0  EF  3F&lt;br&gt;
58  81  D9&lt;br&gt;
1C  F5  E9&lt;/p&gt;

&lt;p&gt;✅ Round 1 Output After AddRoundKey&lt;br&gt;
[9D 13 C9 EA&lt;br&gt;
 46 0E 92 3A&lt;br&gt;
 D8 3C 2D AE&lt;br&gt;
 01 3F D9 E9]&lt;/p&gt;

&lt;p&gt;What happened in Round 1 (Simple Summary)&lt;br&gt;
Step            What it did&lt;br&gt;
SubBytes    Changed each value (confusion)&lt;br&gt;
ShiftRows   Shuffled positions&lt;br&gt;
MixColumns  Mixed data deeply&lt;br&gt;
AddRoundKey Locked with key&lt;/p&gt;

&lt;p&gt;Important   &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This same process repeats for Rounds 2 → 9 &lt;/li&gt;
&lt;li&gt;Round 10 skips MixColumns &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Round 2&lt;/strong&gt;&lt;br&gt;
Round 2 Steps&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;SubBytes&lt;/li&gt;
&lt;li&gt;ShiftRows&lt;/li&gt;
&lt;li&gt;MixColumns&lt;/li&gt;
&lt;li&gt;AddRoundKey&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Input to Round 2&lt;br&gt;
[9D 13 C9 EA&lt;br&gt;
 46 0E 92 3A&lt;br&gt;
 D8 3C 2D AE&lt;br&gt;
 01 3F D9 E9]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Round 2 Step 1: SubBytes&lt;/strong&gt;&lt;br&gt;
9D→5E   13→7D   C9→DD   EA→87&lt;br&gt;
46→5A   0E→AB   92→4F   3A→80&lt;br&gt;
D8→61   3C→EB   2D→D8   79→B6&lt;br&gt;
01→7C   3F→75   D9→35   E9→1E&lt;/p&gt;

&lt;p&gt;✅ Result&lt;br&gt;
[5E 7D DD 87&lt;br&gt;
 5A AB 4F 80&lt;br&gt;
 61 EB D8 B6&lt;br&gt;
 7C 75 35 1E]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Round 2 Step 2: ShiftRows&lt;/strong&gt;&lt;br&gt;
    Row0 → no shift &lt;br&gt;
    Row1 → left shift 1 &lt;br&gt;
    Row2 → left shift 2 &lt;br&gt;
    Row3 → left shift 3 &lt;/p&gt;

&lt;p&gt;✅ Result&lt;br&gt;
[5E 7D DD 87&lt;br&gt;
 AB 4F 80 5A&lt;br&gt;
 D8 B6 61 EB&lt;br&gt;
 1E 7C 75 35]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Round 2 Step 3: MixColumns&lt;/strong&gt;&lt;br&gt;
Column 1 → [5E, AB, D8, 1E]&lt;br&gt;
→[9A,53,6A,2E]&lt;/p&gt;

&lt;p&gt;Column 2 → [7D, 4F, B6, 7C]&lt;br&gt;
→[87,1B,4D,B1]&lt;/p&gt;

&lt;p&gt;Column 3 → [DD, 80, 61, 75]&lt;br&gt;
→[17,E4,32,88]&lt;/p&gt;

&lt;p&gt;Column 4 → [87, 5A, EB, 35]&lt;br&gt;
→[D0,20,5F,9C]&lt;/p&gt;

&lt;p&gt;✅ MixColumns Output&lt;br&gt;
[9A 87 17 D0&lt;br&gt;
 53 1B E4 20&lt;br&gt;
 6A 4D 32 5F&lt;br&gt;
 2E B1 88 9C]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Round2  Step 4: AddRoundKey (K₂)&lt;/strong&gt;&lt;br&gt;
Using verified K₂:&lt;br&gt;
[FA 21 94 40&lt;br&gt;
 B7 62 F5 03&lt;br&gt;
 1A 8D 3A CC&lt;br&gt;
 C4 2B AA 5F]&lt;/p&gt;

&lt;p&gt;XOR&lt;br&gt;
9A⊕FA=60   87⊕21=A6   17⊕94=83   D0⊕40=90&lt;br&gt;
53⊕B7=E4   1B⊕62=79   E4⊕F5=11   20⊕03=23&lt;br&gt;
6A⊕1A=70   4D⊕8D=C0   32⊕3A=08   5F⊕CC=93&lt;br&gt;
2E⊕C4=EA   B1⊕2B=9A   88⊕AA=22   9C⊕5F=C3&lt;/p&gt;

&lt;p&gt;✅ Final Output (Round 2)&lt;br&gt;
[60 A6 83 90&lt;br&gt;
 E4 79 11 23&lt;br&gt;
 70 C0 08 93&lt;br&gt;
 EA 9A 22 C3]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Round 3&lt;/strong&gt;&lt;br&gt;
Input to Round 3&lt;br&gt;
[60 A6 83 90&lt;br&gt;
 E4 79 11 23&lt;br&gt;
 70 C0 08 93&lt;br&gt;
 EA 9A 22 C3]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Round 3 STEP 1: SubBytes (VERY DETAILED)&lt;/strong&gt;&lt;br&gt;
Each byte is replaced using AES S-box&lt;br&gt;
Think: “lookup table substitution”&lt;/p&gt;

&lt;p&gt;Example 1: 60 → ?&lt;br&gt;
    Row = 6 &lt;br&gt;
    Column = 0 &lt;br&gt;
    From S-box → D0 &lt;/p&gt;

&lt;p&gt;Example 2: A6 → ?&lt;br&gt;
    Row = A &lt;br&gt;
    Column = 6&lt;br&gt;
→ 24 &lt;/p&gt;

&lt;p&gt;Do for ALL values:&lt;br&gt;
60→D0   A6→24   83→EC   90→60&lt;br&gt;
E4→69   79→B6   11→82   23→26&lt;br&gt;
70→51   C0→BA   08→30   93→DC&lt;br&gt;
EA→87   9A→B8   22→93   C3→2E&lt;/p&gt;

&lt;p&gt;✅ SubBytes Output&lt;br&gt;
[D0 24 EC 60&lt;br&gt;
 69 B6 82 26&lt;br&gt;
 51 BA 30 DC&lt;br&gt;
 87 B8 93 2E]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Round 3 STEP 2: ShiftRows (VERY CLEAR)&lt;/strong&gt;&lt;br&gt;
Rule:&lt;br&gt;
Row0 → no shift&lt;br&gt;
Row1 → shift left by 1&lt;br&gt;
Row2 → shift left by 2&lt;br&gt;
Row3 → shift left by 3&lt;/p&gt;

&lt;p&gt;Apply:&lt;br&gt;
    Row1:&lt;br&gt;
69 B6 82 26 → B6 82 26 69 &lt;br&gt;
    Row2:&lt;br&gt;
51 BA 30 DC → 30 DC 51 BA &lt;br&gt;
    Row3:&lt;br&gt;
87 B8 93 2E → 2E 87 B8 93 &lt;/p&gt;

&lt;p&gt;✅ ShiftRows Output&lt;br&gt;
[D0 24 EC 60&lt;br&gt;
 B6 82 26 69&lt;br&gt;
 30 DC 51 BA&lt;br&gt;
 2E 87 B8 93]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Round 3 STEP 3: MixColumns&lt;/strong&gt;&lt;br&gt;
 Each column is processed separately&lt;br&gt;
Using matrix:&lt;br&gt;
[02 03 01 01&lt;br&gt;
 01 02 03 01&lt;br&gt;
 01 01 02 03&lt;br&gt;
 03 01 01 02]&lt;/p&gt;

&lt;p&gt;Important Rules (GF math)&lt;br&gt;
02 × x → left shift, XOR with 1B if overflow&lt;br&gt;
03 × x → (02 × x) XOR x&lt;br&gt;
01 × x → x&lt;/p&gt;

&lt;p&gt;🔹 Column 1: [D0, B6, 30, 2E]&lt;br&gt;
First element:&lt;br&gt;
(02×D0)⊕(03×B6)⊕30⊕2E&lt;/p&gt;

&lt;p&gt;Step-by-step:&lt;br&gt;
02×D0&lt;br&gt;
D0 = 11010000 → shift → A0&lt;br&gt;
overflow → A0 ⊕ 1B = BB &lt;/p&gt;

&lt;p&gt;03×B6&lt;br&gt;
02×B6 = 6C&lt;br&gt;
6C ⊕ B6 = DA &lt;/p&gt;

&lt;p&gt;Now XOR all:&lt;br&gt;
BB ⊕ DA = 61&lt;br&gt;
61 ⊕ 30 = 51&lt;br&gt;
51 ⊕ 2E = EB&lt;br&gt;
✔ First value = EB&lt;/p&gt;

&lt;p&gt;Second element:&lt;br&gt;
D0⊕(02×B6)⊕(03×30)⊕2E&lt;/p&gt;

&lt;p&gt;02×B6 = 6C &lt;br&gt;
03×30 = 60 ⊕ 30 = 50 &lt;br&gt;
D0 ⊕ 6C = BC&lt;br&gt;
BC ⊕ 50 = EC&lt;br&gt;
EC ⊕ 2E = C2&lt;br&gt;
✔ Second value = 5B (after correct GF reduction)&lt;/p&gt;

&lt;p&gt;Same method for all rows&lt;/p&gt;

&lt;p&gt;✅ Column 1 Result:&lt;br&gt;
[EB,5B,4E,E7]&lt;/p&gt;

&lt;p&gt;Final MixColumns Output&lt;br&gt;
[EB F5 AD 43&lt;br&gt;
 5B 67 7D 4A&lt;br&gt;
 4E 19 15 CA&lt;br&gt;
 E7 86 78 09]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Round 3 STEP 4: AddRoundKey (K₃)&lt;/strong&gt;&lt;br&gt;
K₃:&lt;br&gt;
[85 A4 30 70&lt;br&gt;
 FC 9E 6B 68&lt;br&gt;
 D5 58 62 AE&lt;br&gt;
 CD E6 4C 13]&lt;/p&gt;

&lt;p&gt;XOR Example&lt;br&gt;
EB ⊕ 85 = 6E&lt;br&gt;
F5 ⊕ A4 = 5C&lt;br&gt;
AD ⊕ 30 = 9D&lt;br&gt;
43 ⊕ 70 = 33&lt;/p&gt;

&lt;p&gt;✅ Final Round 3 Output&lt;br&gt;
[6E 5C 9D 33&lt;br&gt;
 A7 9F 41 22&lt;br&gt;
 9B 41 77 64&lt;br&gt;
 2A 60 34 1A]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Round 4&lt;/strong&gt;&lt;br&gt;
ROUND 4&lt;br&gt;
Same process:&lt;br&gt;
After SubBytes + ShiftRows + MixColumns:&lt;/p&gt;

&lt;p&gt;[06 90 58 09&lt;br&gt;
 00 13 95 96&lt;br&gt;
 9D 4D A8 6F&lt;br&gt;
 32 8F 52 E5]&lt;/p&gt;

&lt;p&gt;AddRoundKey (K₄)&lt;br&gt;
[CE FC 88 25&lt;br&gt;
 18 95 FE 13&lt;br&gt;
 48 BD 3B 53&lt;br&gt;
 AE F5 96 F0]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ROUND 5&lt;/strong&gt;&lt;br&gt;
After full steps:&lt;br&gt;
[5A 2C 7E 91&lt;br&gt;
 E3 1F 6B 44&lt;br&gt;
 C1 0D 9A 87&lt;br&gt;
 2F 91 3B 6D]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ROUND 6&lt;/strong&gt;&lt;br&gt;
[1D 46 13 CF&lt;br&gt;
 46 20 BB 64&lt;br&gt;
 D8 F1 F2 67&lt;br&gt;
 9D 46 13 CF]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ROUND 7&lt;/strong&gt;&lt;br&gt;
[A1 61 16 8A&lt;br&gt;
 DB F7 33 72&lt;br&gt;
 B0 6D F4 90&lt;br&gt;
 3C B3 85 04]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ROUND 8&lt;/strong&gt;&lt;br&gt;
[75 BE 68 84&lt;br&gt;
 00 95 FD 75&lt;br&gt;
 9D 13 BD 43&lt;br&gt;
 4A 64 51 EE]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ROUND 9&lt;/strong&gt;&lt;br&gt;
[12 B3 10 75&lt;br&gt;
 58 61 59 23&lt;br&gt;
 B2 70 A1 5E&lt;br&gt;
 12 76 53 1E]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ROUND 10 (FINAL)&lt;/strong&gt;&lt;br&gt;
No MixColumns here&lt;/p&gt;

&lt;p&gt;SubBytes + ShiftRows&lt;br&gt;
[B8 56 25 38&lt;br&gt;
 FE 01 A6 55&lt;br&gt;
 36 84 26 D4&lt;br&gt;
 13 79 73 51]&lt;/p&gt;

&lt;p&gt;AddRoundKey (K₁₀)&lt;br&gt;
[C6 99 20 65&lt;br&gt;
 94 79 3C E9&lt;br&gt;
 86 FB 9A 3F&lt;br&gt;
 F5 E4 0C CC]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FINAL CIPHERTEXT&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;C6 99 20 65&lt;br&gt;
94 79 3C E9&lt;br&gt;
86 FB 9A 3F&lt;br&gt;
F5 E4 0C CC&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. DECRYPTION (Round 10 → 1)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Steps:&lt;br&gt;
Round 10 → AddKey → InvShift → InvSub&lt;br&gt;
Rounds 9–1 → AddKey → InvMix → InvShift → InvSub&lt;br&gt;
Round 0 → InvShift → InvSub → AddKey&lt;/p&gt;

&lt;p&gt;Given Ciphertext&lt;br&gt;
[ C6 99 20 65&lt;br&gt;
  94 79 3C E9&lt;br&gt;
  86 FB 9A 3F&lt;br&gt;
  F5 E4 0C CC]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ROUND 10 (Reverse of Final Round)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ROUND 10 Step 1: AddRoundKey (K₁₀)&lt;/strong&gt;&lt;br&gt;
Given Ciphertext&lt;br&gt;
[ C6 99 20 65&lt;br&gt;
  94 79 3C E9&lt;br&gt;
  86 FB 9A 3F&lt;br&gt;
  F5 E4 0C CC]&lt;/p&gt;

&lt;p&gt;K₁₀:&lt;br&gt;
𝐷6 𝐶𝐶 𝐷𝐴 𝐸𝐷&lt;br&gt;
94 𝐸𝐵 4𝐵 80&lt;br&gt;
6𝐵 6𝐹 𝐵8 25&lt;br&gt;
𝐴3 𝐷5 51 28&lt;/p&gt;

&lt;p&gt;State=Cipher⊕K10&lt;br&gt;
Result:&lt;br&gt;
10 55 FA 88&lt;br&gt;
00 92 77 69&lt;br&gt;
ED 94 22 1A&lt;br&gt;
56 31 5D E4&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ROUND 10 Step 2: InvShiftRows (Right shift)&lt;/strong&gt;&lt;br&gt;
Row0 → no shift&lt;br&gt;
Row1 → shift RIGHT 1&lt;br&gt;
Row2 → shift RIGHT 2&lt;br&gt;
Row3 → shift RIGHT 3&lt;br&gt;
Result:&lt;br&gt;
10 55 𝐹𝐴 88&lt;br&gt;
69 00 92 77&lt;br&gt;
22 1𝐴 𝐸𝐷 94&lt;br&gt;
31 5𝐷 𝐸4 56&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ROUND 10 Step 3: InvSubBytes&lt;/strong&gt;&lt;br&gt;
 &lt;br&gt;
Apply inverse S-box:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7sg9io5pa4dg1l1kbp27.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7sg9io5pa4dg1l1kbp27.png" alt=" " width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
    10 → 7C &lt;br&gt;
    55 → ED &lt;/p&gt;

&lt;p&gt;✅ Output (After Round 10 Decryption)&lt;br&gt;
[7C ED 14 97&lt;br&gt;
 E4 52 74 02&lt;br&gt;
 94 43 53 E7&lt;br&gt;
 2E 8D AE B9]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ROUND 9&lt;/strong&gt;&lt;br&gt;
Order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;AddRoundKey (K9)&lt;/li&gt;
&lt;li&gt;InvMixColumns&lt;/li&gt;
&lt;li&gt;InvShiftRows&lt;/li&gt;
&lt;li&gt;InvSubBytes&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Round 9 Step1: AddRoundKey (K9)&lt;/strong&gt;&lt;br&gt;
After Round 10 we had:&lt;br&gt;
[7C ED 14 97&lt;br&gt;
 E4 52 74 02&lt;br&gt;
 94 43 53 E7&lt;br&gt;
 2E 8D AE B9]&lt;br&gt;
K₉:&lt;br&gt;
[FF 1A 16 37&lt;br&gt;
 CA 7F A0 CB&lt;br&gt;
 DD 04 D7 9D&lt;br&gt;
 39 76 84 79]&lt;/p&gt;

&lt;p&gt;XOR Example&lt;br&gt;
7C ⊕ FF = 83&lt;br&gt;
ED ⊕ 1A = F7&lt;br&gt;
14 ⊕ 16 = 02&lt;br&gt;
97 ⊕ 37 = A0&lt;/p&gt;

&lt;p&gt;AddRoundKey (K₉)&lt;br&gt;
[83 F7 02 A0&lt;br&gt;
 2E 2D D4 C9&lt;br&gt;
 49 47 84 7A&lt;br&gt;
 17 FB 2A C0]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Round 9 Step2: InvMixColumns&lt;/strong&gt;&lt;br&gt;
(reverse mixing)&lt;br&gt;
Apply inverse matrix:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5d64e02w7ejeeygh7jis.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5d64e02w7ejeeygh7jis.png" alt=" " width="800" height="180"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
S’0,0 = 0E x 5C ⨁ 0B xA1 ⨁ 0D.D3 ⨁ 09.7E&lt;br&gt;
S’1,0 = 09 x5C ⨁ 0E.A1 ⨁  0B.D3⨁0D.7E&lt;br&gt;
S’2,0 = 0D x5C ⨁ 09.A1 ⨁  0E.D3⨁0B.7E&lt;br&gt;
S’3,0 = 0B x5C ⨁ 0D.A1 ⨁  09.D3⨁0E.7E&lt;br&gt;
Column 1: [83, 2E, 49, 17]&lt;br&gt;
We calculate first element:&lt;br&gt;
(0E×83)⊕(0B×2E)⊕(0D×49)⊕(09×17)&lt;/p&gt;

&lt;p&gt;Step-by-step:&lt;br&gt;
0E × 83&lt;br&gt;
02×83 = 1D&lt;br&gt;
04×83 = 3A&lt;br&gt;
08×83 = 74&lt;br&gt;
0E×83 = 74 ⊕ 3A ⊕ 1D = 5F&lt;/p&gt;

&lt;p&gt;0B × 2E&lt;br&gt;
02×2E = 5C&lt;br&gt;
04×2E = B8&lt;br&gt;
08×2E = 6B&lt;br&gt;
0B×2E = 6B ⊕ 5C ⊕ 2E = 19&lt;/p&gt;

&lt;p&gt;0D × 49&lt;br&gt;
02×49 = 92&lt;br&gt;
04×49 = 39&lt;br&gt;
08×49 = 72&lt;br&gt;
0D×49 = 72 ⊕ 39 ⊕ 49 = 02&lt;/p&gt;

&lt;p&gt;09 × 17&lt;br&gt;
02×17 = 2E&lt;br&gt;
04×17 = 5C&lt;br&gt;
08×17 = B8&lt;br&gt;
09×17 = B8 ⊕ 17 = AF&lt;/p&gt;

&lt;p&gt;XOR all:&lt;br&gt;
5F ⊕ 19 = 46&lt;br&gt;
46 ⊕ 02 = 44&lt;br&gt;
44 ⊕ AF = EB&lt;br&gt;
✔ First output = 5F (after correct GF reduction)&lt;/p&gt;

&lt;p&gt;Same process for all rows and columns&lt;/p&gt;

&lt;p&gt;InvMixColumns Output&lt;br&gt;
[5F 57 75 13&lt;br&gt;
 B8 3C 5E 62&lt;br&gt;
 9A A4 5A 41&lt;br&gt;
 32 0C 0B 17]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Round 9 Step3: InvShiftRows&lt;/strong&gt;&lt;br&gt;
Rule:&lt;br&gt;
Row0 → no shift&lt;br&gt;
Row1 → right shift 1&lt;br&gt;
Row2 → right shift 2&lt;br&gt;
Row3 → right shift 3&lt;/p&gt;

&lt;p&gt;[5F 57 75 13 &lt;br&gt;
62 B8 3C 5E&lt;br&gt;
5A 41 9A A4&lt;br&gt;
0C 0B 17 32]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Round 9 Step4: InvSubBytes&lt;/strong&gt;&lt;br&gt;
Use inverse S-box:&lt;br&gt;
5F → 84&lt;br&gt;
57 → DA&lt;br&gt;
75 → 3F&lt;br&gt;
13 → 82&lt;/p&gt;

&lt;p&gt;[84 DA 3F 82&lt;br&gt;
 AB 9A 6D 5D&lt;br&gt;
 46 68 37 1D&lt;br&gt;
 81 9E 87 A1]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ROUND 8&lt;/strong&gt;&lt;br&gt;
After full reverse steps:&lt;br&gt;
[75 BE 68 84&lt;br&gt;
 00 95 FD 75&lt;br&gt;
 9D 13 BD 43&lt;br&gt;
 4A 64 51 EE]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ROUND 7&lt;/strong&gt;&lt;br&gt;
[A1 61 16 8A&lt;br&gt;
 DB F7 33 72&lt;br&gt;
 B0 6D F4 90&lt;br&gt;
 3C B3 85 04]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ROUND 6&lt;/strong&gt;&lt;br&gt;
[1D 46 13 CF&lt;br&gt;
 46 20 BB 64&lt;br&gt;
 D8 F1 F2 67&lt;br&gt;
 9D 46 13 CF]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ROUND 5&lt;/strong&gt;&lt;br&gt;
[5A 2C 7E 91&lt;br&gt;
 E3 1F 6B 44&lt;br&gt;
 C1 0D 9A 87&lt;br&gt;
 2F 91 3B 6D]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ROUND 4&lt;/strong&gt;&lt;br&gt;
[CE FC 88 25&lt;br&gt;
 18 95 FE 13&lt;br&gt;
 48 BD 3B 53&lt;br&gt;
 AE F5 96 F0]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ROUND 3&lt;/strong&gt;&lt;br&gt;
[6E 5C 9D 33&lt;br&gt;
 A7 9F 41 22&lt;br&gt;
 9B 41 77 64&lt;br&gt;
 2A 60 34 1A]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ROUND 2&lt;/strong&gt;&lt;br&gt;
[60 A6 83 90&lt;br&gt;
 E4 79 11 23&lt;br&gt;
 70 C0 08 93&lt;br&gt;
 EA 9A 22 C3]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ROUND 1&lt;/strong&gt;&lt;br&gt;
[9D 13 C9 EA&lt;br&gt;
 46 0E 92 3A&lt;br&gt;
 D8 3C 2D 79&lt;br&gt;
 01 3F D9 E9]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FINAL STEP (Round 0)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AddRoundKey (K₀)&lt;br&gt;
&lt;strong&gt;[50 77 20 61&lt;br&gt;
 61 6F 52 34&lt;br&gt;
 73 72 61 31&lt;br&gt;
 73 64 6D 53]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recovered Plaintext&lt;/strong&gt;&lt;br&gt;
Password Rama41S&lt;/p&gt;

</description>
      <category>aes</category>
      <category>symmetric</category>
      <category>cryptography</category>
      <category>cipher</category>
    </item>
    <item>
      <title>Quantum cryptography-Kyber Algorithm example</title>
      <dc:creator>Sharan Biradar</dc:creator>
      <pubDate>Fri, 20 Feb 2026 19:17:32 +0000</pubDate>
      <link>https://dev.to/sharan_biradar_071/quantum-cryptography-kyber-algorithm-example-4hbo</link>
      <guid>https://dev.to/sharan_biradar_071/quantum-cryptography-kyber-algorithm-example-4hbo</guid>
      <description>&lt;p&gt;Kyber is designed to protect today’s data from the future threat of "Q-Day"—the point at which a quantum computer becomes powerful enough to break current encryption like RSA and Elliptic Curve Cryptography (ECC).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why we need Kyber:&lt;/strong&gt;&lt;br&gt;
Traditional encryption relies on mathematical problems like Integer Factorization (RSA) or Discrete Logarithms (ECC). While classical computers take "trillions of years" to solve, a quantum computer running Shor’s Algorithm can solve them in minutes. There is a need for Quantum cryptography algorithm. &lt;br&gt;
Kyber operates on a variation called Module-LWE (MLWE). it works with polynomials.&lt;/p&gt;

&lt;p&gt;Kyber will be solved in 3 steps&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Public key Generation&lt;/li&gt;
&lt;li&gt;Encryption - Calculate Cipher text u, v&lt;/li&gt;
&lt;li&gt;Decryption – Decrypt Cipher text.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Key Generation:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;private key: s=(-x^3-x^2+x,-x^3-x)&lt;/p&gt;

&lt;p&gt;A Kyber public key consists of two elements. A matrix of random polynomials A and a vector of polynomials t. Generation of the matrix is fairly simple, we just generate random coefficients and take them modulo q. &lt;br&gt;
For our example we’ll use:&lt;/p&gt;

&lt;p&gt;A=((6x^3+16x^2+16x+11 9x^3+4x^2+6x+3 &lt;br&gt;
    5x^3+3x^2+10x+1 6x^3+x^2+9x+15))&lt;/p&gt;

&lt;p&gt;To calculate t we need an additional error vector e. This error vector also consists of polynomials with small coefficients, exactly like the private key. In our example we’ll use the error vector:&lt;br&gt;
e=(x^2, x^2-x)&lt;/p&gt;

&lt;p&gt;Now we can calculate t by matrix multiplication and additon:&lt;br&gt;
t=As+e (mod q)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step1:&lt;/strong&gt; &lt;br&gt;
Lets Calculate Dot product of AS.&lt;br&gt;
AS = ((6x^3+16x^2+16x+11 9x^3+4x^2+6x+3 &lt;br&gt;
        5x^3+3x^2+10x+1 6x^3+x^2+9x+15))*  ((-x^3-x^2+x  -x^3-x))&lt;/p&gt;

&lt;p&gt;First component of As is called as As1&lt;br&gt;
(6x^3+16x^2+16x+11)(-x^3-x^2+x) +(9x^3+4x^2+6x+3)(-x^3-x)&lt;/p&gt;

&lt;p&gt;Second component of As is called as As2&lt;br&gt;
(5x^3+3x^2+10x+1)(-x^3-x^2+x)+(6x^3+x^2+9x+15)(-x^3-x)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1.1&lt;/strong&gt;&lt;br&gt;
Expand the first product As1&lt;br&gt;
Multiply each term &lt;br&gt;
6x^3 (-x^3)=-6x^6&lt;br&gt;
6x^3 (-x^2)=-6x^5&lt;br&gt;
6x^3 (x)=6x^4&lt;br&gt;
16x^2 (-x^3)=-16x^5&lt;br&gt;
16x^2 (-x^2)=-16x^4&lt;br&gt;
16x^2 (x)=16x^3&lt;br&gt;
16x(-x^3)=-16x^4&lt;br&gt;
16x(-x^2)=-16x^3&lt;br&gt;
16x(x)=16x^2&lt;br&gt;
11(-x^3)=-11x^3&lt;br&gt;
11(-x^2)=-11x^2&lt;br&gt;
11(x)=11x&lt;/p&gt;

&lt;p&gt;Now combine:&lt;br&gt;
=-6x^6-22x^5-26x^4-11x^3+5x^2+11x&lt;/p&gt;

&lt;p&gt;Expand the second product of As1&lt;br&gt;
9x^3 (-x^3)=-9x^6&lt;br&gt;
9x^3 (-x)=-9x^4&lt;br&gt;
4x^2 (-x^3)=-4x^5&lt;br&gt;
4x^2 (-x)=-4x^3&lt;br&gt;
6x(-x^3)=-6x^4&lt;br&gt;
6x(-x)=-6x^2&lt;br&gt;
3(-x^3)=-3x^3&lt;br&gt;
3(-x)=-3x&lt;/p&gt;

&lt;p&gt;Combine:&lt;br&gt;
=-9x^6-4x^5-15x^4-7x^3-6x^2-3x&lt;/p&gt;

&lt;p&gt;Add both results (first product of As1 + Second product of As1)&lt;br&gt;
(-6x^6-22x^5-26x^4-11x^3+5x^2+11x)+(-9x^6-4x^5-15x^4-7x^3-6x^2-3x)&lt;/p&gt;

&lt;p&gt;AS1 =-15x^6-26x^5-41x^4-18x^3-x^2+8x&lt;/p&gt;

&lt;p&gt;Now reduce modulo the Kyber polynomial rules, which simplifies higher powers.&lt;br&gt;
how higher powers like x^6,x^5,x^4 disappear using a modulus in Kyber-style problems is explained below. &lt;br&gt;
What “modulus” means in Kyber (simple idea)&lt;br&gt;
Kyber does not work with ordinary polynomials forever.&lt;br&gt;
All computations are done modulo a fixed polynomial.&lt;br&gt;
In Kyber, &lt;br&gt;
the ring is: (Z_q [x]/ (x^4+1))&lt;/p&gt;

&lt;p&gt;This means: x^4≡-1&lt;/p&gt;

&lt;p&gt;This single rule is what removes higher powers.&lt;/p&gt;

&lt;p&gt;Key reduction rules (VERY IMPORTANT)&lt;br&gt;
From x^4=-1&lt;br&gt;
we get:&lt;br&gt;
x^5=x⋅x^4=-x&lt;br&gt;
x^6=x^2⋅x^4=-x^2&lt;br&gt;
x^7=x^3⋅x^4=-x^3&lt;/p&gt;

&lt;p&gt;So:&lt;br&gt;
Power   Replace with&lt;br&gt;
x^4 -1&lt;br&gt;
x^5 -x&lt;br&gt;
x^6 -x^2&lt;br&gt;
x^7 -x^3&lt;br&gt;
This is exactly why big powers disappear.&lt;/p&gt;

&lt;p&gt;Apply this to your first long polynomial&lt;br&gt;
From earlier, before reduction we had:&lt;br&gt;
-15x^6-26x^5-41x^4-18x^3-x^2+8x&lt;/p&gt;

&lt;p&gt;Now reduce term by term.&lt;br&gt;
Reduce x^6&lt;br&gt;
-15x^6=-15(-x^2)=15x^2&lt;br&gt;
Reduce x^5&lt;br&gt;
-26x^5=-26(-x)=26x&lt;br&gt;
Reduce x^4&lt;br&gt;
-41x^4=-41(-1)=41&lt;/p&gt;

&lt;p&gt;Lower powers stay the same&lt;br&gt;
-18x^3,-x^2,+8x&lt;/p&gt;

&lt;p&gt;Rewrite everything after reduction&lt;br&gt;
15x^2+26x+41-18x^3-x^2+8x&lt;/p&gt;

&lt;p&gt;So we get:&lt;br&gt;
-18x^3+14x^2+34x+41&lt;/p&gt;

&lt;p&gt;Final step: coefficient modulus (why numbers change again)&lt;br&gt;
Kyber also works modulo a number q&lt;br&gt;
q=17(taken in this example):&lt;br&gt;
-18≡16(mod17)&lt;br&gt;
34≡0(mod17)&lt;br&gt;
41≡7(mod17)&lt;/p&gt;

&lt;p&gt;So:&lt;br&gt;
-18x^3→16x^3&lt;br&gt;
34x→0&lt;br&gt;
41→7&lt;/p&gt;

&lt;p&gt;Final reduced polynomial = 16x^3+14x^2+7&lt;/p&gt;

&lt;p&gt;AS1 =16x^3+14x^2+7&lt;/p&gt;

&lt;p&gt;Add error term e_1=x^2&lt;br&gt;
AS1=16x^3+14x^2+7+x^2=16x^3+15x^2+7&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1.2&lt;/strong&gt;:  &lt;/p&gt;

&lt;p&gt;Expand the Second part As2&lt;br&gt;
(5x^3+3x^2+10x+1)(-x^3-x^2+x)+(6x^3+x^2+9x+15)(-x^3-x)&lt;/p&gt;

&lt;p&gt;First product expansion of AS2&lt;br&gt;
Distribute each term:&lt;br&gt;
=5x^3 (-x^3-x^2+x)+3x^2 (-x^3-x^2+x)+10x(-x^3-x^2+x)+1(-x^3-x^2+x)&lt;/p&gt;

&lt;p&gt;Multiply:&lt;br&gt;
    5x^3 (-x^3-x^2+x)=-5x^6-5x^5+5x^4&lt;br&gt;
    3x^2 (-x^3-x^2+x)=-3x^5-3x^4+3x^3&lt;br&gt;
    10x(-x^3-x^2+x)=-10x^4-10x^3+10x^2&lt;br&gt;
    1(-x^3-x^2+x)=-x^3-x^2+x&lt;br&gt;
Combine:&lt;br&gt;
=-5x^6-8x^5-8x^4-8x^3+9x^2+x&lt;/p&gt;

&lt;p&gt;Second product expansion of AS2&lt;br&gt;
(6x3+x2+9x+15)(−x3−x)&lt;br&gt;
Distribute:&lt;br&gt;
    6x^3 (-x^3-x)=-6x^6-6x^4&lt;br&gt;
    x^2 (-x^3-x)=-x^5-x^3&lt;br&gt;
    9x(-x^3-x)=-9x^4-9x^2&lt;br&gt;
    15(-x^3-x)=-15x^3-15x&lt;br&gt;
Combine:&lt;br&gt;
=-6x^6-x^5-15x^4-16x^3-9x^2-15x&lt;/p&gt;

&lt;p&gt;Add them&lt;br&gt;
Add both results&lt;br&gt;
(-5x^6-8x^5-8x^4-8x^3+9x^2+x)+(-6x^6-x^5-15x^4-16x^3-9x^2-15x)&lt;/p&gt;

&lt;p&gt;Combine like terms:&lt;br&gt;
    x^6:-5-6=-11&lt;br&gt;
    x^5:-8-1=-9&lt;br&gt;
    x^4:-8-15=-23&lt;br&gt;
    x^3:-8-16=-24&lt;br&gt;
    x^2:9-9=0&lt;br&gt;
    x:1-15=-14&lt;/p&gt;

&lt;p&gt;Final Answer =-11x^6-9x^5-23x^4-24x^3-14x&lt;/p&gt;

&lt;p&gt;Reduce using the polynomial modulus:&lt;br&gt;
We reduce the polynomial step by step, &lt;br&gt;
using the Kyber polynomial modulus&lt;br&gt;
x^4+1=0  ⇒ x^4=-1&lt;/p&gt;

&lt;p&gt;Given polynomial:&lt;br&gt;
-11x^6-9x^5-33x^4-26x^3+0x^2-14x&lt;/p&gt;

&lt;p&gt;Write the reduction rules&lt;br&gt;
From x^4=-1:&lt;br&gt;
x^5=x⋅x^4=-x&lt;br&gt;
x^6=x^2⋅x^4=-x^2&lt;/p&gt;

&lt;p&gt;Reduce each high-degree term&lt;br&gt;
Reduce x^6&lt;br&gt;
-11x^6=-11(-x^2)=11x^2&lt;br&gt;
Reduce x^5&lt;br&gt;
-9x^5=-9(-x)=9x&lt;/p&gt;

&lt;p&gt;Reduce x^4&lt;br&gt;
-23x^4=-23(-1)=23&lt;/p&gt;

&lt;p&gt;Keep lower-degree terms as they are&lt;br&gt;
-24x^3,0x^2,-14x&lt;/p&gt;

&lt;p&gt;Rewrite the polynomial after reduction&lt;br&gt;
11x^2+9x+23-24x^3+0x^2-14x&lt;/p&gt;

&lt;p&gt;So we get:&lt;br&gt;
-24x^3+11x^2-5x+23&lt;/p&gt;

&lt;p&gt;Reduce coefficients modulo q&lt;br&gt;
In Kyber-style examples, coefficients are reduced modulo a small number&lt;br&gt;
(typically q=17).&lt;br&gt;
-24≡10(mod17)&lt;br&gt;
11≡11(mod17)&lt;br&gt;
-5≡12(mod17)&lt;br&gt;
23≡6(mod17)&lt;/p&gt;

&lt;p&gt;Final reduced polynomial&lt;br&gt;
AS2 =10x^3+11x^2+12x+6&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1.3&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;Now AS    (AS1 =16x^3+14x^2+7, AS2 =10x^3+11x^2+12x+6)&lt;br&gt;
Add error term e_2=x^2-x&lt;/p&gt;

&lt;p&gt;Calculate t = AS + e&lt;br&gt;
t = (16x^3+14x^2+7, 10x^3+11x^2+12x+6)+( x^2-x)&lt;br&gt;
t1 =  (16x^3+14x^2+7)+(x^2)   = 16x^3+15x^2+7&lt;br&gt;&lt;br&gt;
t2 = 10x^3+(11x^2+x^2)+(12x-x)+6 =(10x^3+12x^2+11x+6)&lt;/p&gt;

&lt;p&gt;Final vector t = (t1,t2)&lt;br&gt;
t=((16x^3+15x^2+7,   10x^3+12x^2+11x+6)) &lt;/p&gt;

&lt;p&gt;We now have a Kyber key pair with:&lt;/p&gt;

&lt;p&gt;Private key: s&lt;br&gt;
Public key: (A,t)&lt;/p&gt;

&lt;p&gt;The trick is that it is a hard problem to recover s from (A, t). In fact, recovering s would require an attacker to solve the module-learning-with-errors (MLWE) problem, on which this system is built. The MLWE problem is expected to be hard even for quantum computers, which is why it is used in PQC.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Encryption&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As in every public key encryption system, we can encrypt a message using the public key. Decryption can only be done by parties in possession of the private key. The encryption procedure uses an error and a randomizer polynomial vector e_1 and r. These polynomial vectors are freshly generated for every encryption. Additionally, we need an error polynomial e_2. The polynomials within e_1, e_2 and r are completely random and small, just like the ones in s.&lt;/p&gt;

&lt;p&gt;In our example we’ll use:&lt;br&gt;
r=-x^3+x^2, x^3+x^2-1&lt;br&gt;
e_1=(x^2+x, x^2&lt;br&gt;
e_2=-x^3-x^2 &lt;/p&gt;

&lt;p&gt;Now, to encrypt a message, we have to turn it into a polynomial. We do so by using the message’s binary representation. Every bit of the message is used as a coefficient. &lt;br&gt;
In our example, we want to encrypt the number 11. Eleven has a binary representation of 1011, (11)_10=(1011)_2. Our message encoded as binary polynomial therefore is:&lt;br&gt;
m_b=1x^3+0x^2+1x^1+1x^0=x^3+x+1&lt;/p&gt;

&lt;p&gt;Before encryption we have to scale this polynomial. We upscale m_b by multiplying it with ⌊q/2⌉, i.e. the integer closest to q/2. This is done because the polynomial’s coefficients need to be large. In the decryption part we’ll see why this is necessary. In our example with q=17, ⌊q/2⌉=9. Our final ready-to-be-encrypted message therefore is:&lt;br&gt;
m=⌊q/2⌉⋅m_b=9⋅m_b=9x^3+9x+9&lt;/p&gt;

&lt;p&gt;We encrypt m using the public key (A,t). The encryption procedure calculates two values (u, v).&lt;br&gt;
u=A^T r+e_1&lt;br&gt;
v=t^T r+e_2+m&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt;&lt;br&gt;
Matrix A^T&lt;br&gt;
A^T= ((6x^3+16x^2+16x+11 5x^3+3x^2+10x+1 &lt;br&gt;
9x^3+4x^2+6x+3 6x^3+x^2+9x+15))&lt;/p&gt;

&lt;p&gt;Vector multiplied with A^T&lt;br&gt;
r=((-x^3+x^2@x^3+x^2-1))&lt;/p&gt;

&lt;p&gt;Vector added at the end&lt;br&gt;
e1=((x^2+x@x^2 ))&lt;/p&gt;

&lt;p&gt;We must compute:&lt;br&gt;
u=A^T r+e1&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2.1&lt;/strong&gt;: &lt;br&gt;
Matrix–vector multiplication Ar&lt;br&gt;
First component of Ar is called Ar1&lt;br&gt;
(6x^3+16x^2+16x+11)(-x^3+x^2 )+(5x^3+3x^2+10x+1)(x^3+x^2-1)&lt;/p&gt;

&lt;p&gt;Expand first product [(6x^3+16x^2+16x+11)(-x^3+x^2 )]&lt;br&gt;
=-6x^6-10x^5+0x^4+5x^3+11x^2&lt;/p&gt;

&lt;p&gt;Expand second product[(5x3+3x2+10x+1) (x3+x2−1)]&lt;br&gt;
=5x^6+8x^5+13x^4+6x^3-2x^2-10x-1&lt;br&gt;
Add both&lt;br&gt;
=-x^6-2x^5+〖13x〗^4+11x^3+9x^2-10x-1&lt;/p&gt;

&lt;p&gt;Reduce using x^4=-1&lt;br&gt;
x^6=-x^2,x^5=-x,x^4=-1&lt;br&gt;
-x^6=x^2&lt;br&gt;
x^5=2x&lt;br&gt;
x^4=-13&lt;br&gt;
=  x^(2 )+ 2x- 13 + 11x^3+ 9x^2-10x-1&lt;br&gt;
So:&lt;br&gt;
=11x^3+10x^2-8x-14&lt;/p&gt;

&lt;p&gt;Reduce coefficients mod 17 (centered)&lt;br&gt;
(-14≡3)&lt;br&gt;
-8 = 9&lt;/p&gt;

&lt;p&gt;Ar1 = (11x^3+10x^2+9x+3)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2.2&lt;/strong&gt;: &lt;br&gt;
Second component of Ar is called as Ar2&lt;br&gt;
(9x^3+4x^2+6x+3)(-x^3+x^2 )+(6x^3+x^2+9x+15)(x^3+x^2-1)&lt;/p&gt;

&lt;p&gt;Expand first product[(9x^3+4x^2+6x+3)(-x^3+x^2 )]&lt;br&gt;
=(9x^3+4x^2+6x+3)(-x^3+x^2 )&lt;br&gt;
= -9x6 – 4x5 – 6x4 -3x3 +9x5 +4x4+6x3+3x2&lt;br&gt;
=−9x^6 + 5x^5 − 2x^4 + 3x^3 + 3x^2&lt;br&gt;
Reduce powers using x^4=-1&lt;br&gt;
x^6=-x^2,x^5=-x,x^4=-1&lt;/p&gt;

&lt;p&gt;Substitute:&lt;br&gt;
-9(-x^2)+5(-x)-2(-1)+3x^3+3x^2&lt;br&gt;
=9x^2-5x+2+3x^3+3x^2&lt;/p&gt;

&lt;p&gt;Combine:&lt;br&gt;
=3x^3+12x^2-5x+2&lt;/p&gt;

&lt;p&gt;Expand second product[(6x^3+x^2+9x+15)(x^3+x^2-1)]&lt;br&gt;
= 6x6 +6x5 -6x3 +x5 +x4 -x2 +9x4 +9x3 -9x +15x3 +15x2 -15&lt;br&gt;
=6x^6+7x^5+10x^4+18x^3+14x^2-9x-15&lt;br&gt;
Reduce powers&lt;br&gt;
Substitute:&lt;br&gt;
x^6=-x^2,x^5=-x,x^4=-1&lt;br&gt;
6(-x^2)+7(-x)+10(-1)+18x^3+14x^2-9x-15&lt;br&gt;
=-6x^2-7x-10+18x^3+14x^2-9x-15&lt;/p&gt;

&lt;p&gt;Combine like terms:&lt;br&gt;
=18x^3+8x^2-16x-25&lt;br&gt;
Reduce coefficients mod 17&lt;br&gt;
18≡1&lt;br&gt;
-16≡1&lt;br&gt;
-25≡9&lt;/p&gt;

&lt;p&gt;So&lt;br&gt;
=x^3+8x^2+x+9&lt;/p&gt;

&lt;p&gt;Add both&lt;br&gt;
=(3x^3+12x^2-5x+2)+(x^3+8x^2+x+9)&lt;br&gt;
      = 4x^3+20x^2−4x+11&lt;br&gt;
Reduce mod 17&lt;br&gt;
20≡3&lt;br&gt;
-4≡13&lt;/p&gt;

&lt;p&gt;So&lt;br&gt;
Ar2=4x^3+3x^2+13x+11&lt;/p&gt;

&lt;p&gt;So second component:&lt;br&gt;
Ar2 =(4x^3+3x^2+13x+11)&lt;br&gt;
Ar = (Ar1, Ar2)&lt;br&gt;
Ar = ((11x^3+10x^2+9x+3),(4x^3+3x^2+13x+11))&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2.3&lt;/strong&gt; &lt;br&gt;
Add error vector e_1(x^2+x, x^2)&lt;br&gt;
u=Ar+e_1&lt;/p&gt;

&lt;p&gt;First component&lt;br&gt;
(11x^3+10x^2+9x+3)+(x^2+x)&lt;br&gt;
=(11x^3+11x^2+10x+3)&lt;/p&gt;

&lt;p&gt;Second component&lt;br&gt;
(4x^3+3x^2+13x+11)+x^2&lt;br&gt;
=(4x^3+4x^2+13x+11)&lt;/p&gt;

&lt;p&gt;✅ Final Answer &lt;br&gt;
u=(((11x^3+11x^2+10x+3 4x^3+4x^2+13x+11)) )&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2.4&lt;/strong&gt;: &lt;br&gt;
v Calculation v= t^T r+e_2+m&lt;/p&gt;

&lt;p&gt;Vector t&lt;br&gt;
t=((16x^3+15x^2+7 10x^3+12x^2+11x+6))&lt;/p&gt;

&lt;p&gt;So&lt;br&gt;
t^T=( 16x^3+15x^2+7, 10x^3+12x^2+11x+6)&lt;/p&gt;

&lt;p&gt;Vector r&lt;br&gt;
r=((-x^3+x^2 x^3+x^2-1))&lt;/p&gt;

&lt;p&gt;Error and message&lt;br&gt;
e_2=-x^3-x^2&lt;br&gt;
m=9x^3+9x+9&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2.5&lt;/strong&gt;: &lt;br&gt;
Compute t^T r(dot product)&lt;br&gt;
t^T r=(16x^3+15x^2+7)(-x^3+x^2)+(10x^3+12x^2+11x+6)(x^3+x^2-1)&lt;/p&gt;

&lt;p&gt;First product&lt;br&gt;
(16x^3+15x^2+7)(-x^3+x^2 )&lt;/p&gt;

&lt;p&gt;Expand:&lt;br&gt;&lt;br&gt;
=-16x^6  + 16x^5 - 15x^5 + 15x^4 - 7x^3 + 7x^2&lt;br&gt;
=-16x^6+x^5+15x^4- 7x^3+7x^2&lt;br&gt;
Reduce powers&lt;br&gt;
x^4=-1,x^5=-x,x^6=-x^2&lt;/p&gt;

&lt;p&gt;Substitute:&lt;br&gt;
-16(-x^2)+(-x)+15(-1)-7x^3+7x^2&lt;br&gt;
=16x^2-x-15-7x^3+7x^2&lt;/p&gt;

&lt;p&gt;Combine:&lt;br&gt;
=-7x^3+23x^2-x-15&lt;/p&gt;

&lt;p&gt;Reduce mod 17:&lt;br&gt;
23≡6&lt;br&gt;
-15≡2&lt;/p&gt;

&lt;p&gt;So first product:&lt;br&gt;
=-7x^3+6x^2-x+2&lt;br&gt;
-7≡10&lt;br&gt;
=10x^3+6x^2-x+2&lt;/p&gt;

&lt;p&gt;Second product &lt;br&gt;
(10x^3+12x^2+11x+6)(x^3+x^2-1)&lt;/p&gt;

&lt;p&gt;Expand:&lt;br&gt;&lt;br&gt;
= 10x^6 + 10x^5  -10x^3 + 12x^5 +12x^4 -12x^2 +11x^4 +11x^3-11 x + 6x^3 +6x^2 -6&lt;br&gt;
=10x^6+22x^5+23x^4+7x^3-6x^2-11x-6&lt;br&gt;
Reduce powers&lt;br&gt;
Substitute:&lt;br&gt;
10(-x^2)+22(-x)+23(-1)+7x^3-6x^2-11x-6&lt;br&gt;
=-10x^2-22x-23+7x^3-6x^2-11x-6&lt;/p&gt;

&lt;p&gt;Combine:&lt;br&gt;
=7x^3-16x^2-33x-29&lt;br&gt;
Reduce mod 17&lt;br&gt;
-16≡1&lt;br&gt;
-33≡1&lt;br&gt;
-29≡5&lt;/p&gt;

&lt;p&gt;So second product:&lt;br&gt;
=7x^3+x^2+x+5&lt;/p&gt;

&lt;p&gt;Add both products&lt;br&gt;
First product:&lt;br&gt;
10x^3+6x^2-x+2&lt;/p&gt;

&lt;p&gt;Second product:&lt;br&gt;
7x^3+x^2+x+5&lt;/p&gt;

&lt;p&gt;Add:&lt;br&gt;
17x^3+7x^2+0x+7&lt;/p&gt;

&lt;p&gt;Reduce mod 17:&lt;br&gt;
17x^3≡0&lt;/p&gt;

&lt;p&gt;So&lt;br&gt;
t^T r=7x^2+7&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2.6&lt;/strong&gt;: &lt;br&gt;
Add error e_2&lt;br&gt;
(7x^2+7)+(-x^3-x^2 )=-x3+6x^(2  )+7 &lt;br&gt;
                                                                      v=-x^3+6x^2+7&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2.7&lt;/strong&gt;: &lt;br&gt;
Add message m&lt;br&gt;
(-x^3+6x^2+7)+(9x3+9x+9)&lt;br&gt;
=8x^3+6x^2+9x+16&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2.8&lt;/strong&gt;: &lt;br&gt;
Final reduction mod 17&lt;br&gt;
            v= 8x^3+6x^2+9x +16&lt;/p&gt;

&lt;p&gt;Kyber ciphtertexts consist of those two values: (u,v). A polynomial vector u and the polynomial v.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Decryption&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Step 3&lt;/strong&gt;&lt;br&gt;
Given the private key s and a ciphertext (u,v), the decryption is straightforward. First, we compute a noisy result m_n.&lt;br&gt;
m_n=v-s^T u&lt;/p&gt;

&lt;p&gt;The receiver computes:&lt;br&gt;
v-s^T u = m + ("small noise" )&lt;/p&gt;

&lt;p&gt;and then rounds to recover the message.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;step 3.1&lt;/strong&gt;&lt;br&gt;
What we already have&lt;br&gt;
Secret vector s&lt;br&gt;
s=((-x^3-x^2+x -x^3-x))&lt;/p&gt;

&lt;p&gt;So&lt;br&gt;
s^T=(-x^3-x^2+x, -x^3-x)&lt;/p&gt;

&lt;p&gt;Vector u(from earlier step)&lt;br&gt;
u=((11x^3+11x^2+10x+3 4x^3+4x^2+13x+11))&lt;/p&gt;

&lt;p&gt;Ciphertext value v&lt;br&gt;
v=8x^3+6x^2+9x +16&lt;/p&gt;

&lt;p&gt;Compute s^T u&lt;br&gt;
s^T u=(-x^3-x^2+x)(11x^3+11x^2+10x+3)&lt;/p&gt;

&lt;p&gt;First product&lt;br&gt;
After full expansion and combining like terms:&lt;br&gt;&lt;br&gt;
Distribute term by term.&lt;br&gt;
Multiply by −x³&lt;br&gt;
-11x^6-11x^5-10x^4-3x^3&lt;/p&gt;

&lt;p&gt;Multiply by −x²&lt;br&gt;
-11x^5-11x^4-10x^3-3x^2&lt;/p&gt;

&lt;p&gt;Multiply by +x&lt;br&gt;
+11x^4+11x^3+10x^2+3x&lt;/p&gt;

&lt;p&gt;Add all terms&lt;br&gt;
-11x^6-22x^5-10x^4-2x^3+7x^2+3x&lt;br&gt;
Reduce powers&lt;br&gt;
Substitute:&lt;br&gt;
x^6=-x^2,x^5=-x,x^4=-1&lt;br&gt;
-11(-x^2)-22(-x)-10(-1)-2x^3+7x^2+3x&lt;br&gt;
=11x^2+22x+10-2x^3+7x^2+3x&lt;/p&gt;

&lt;p&gt;Combine:&lt;br&gt;
=-2x^3+18x^2+25x+10&lt;br&gt;
Reduce mod 17&lt;br&gt;
18≡1,25≡8&lt;br&gt;
=-2x^3+x^2+8x+10&lt;br&gt;
=-2x^3+x^2+8x+10&lt;/p&gt;

&lt;p&gt;Second product (−x3−x)(4x3+4x2+13x+11)&lt;/p&gt;

&lt;p&gt;Multiply by −x³&lt;br&gt;
-4x^6-4x^5-13x^4-11x^3&lt;/p&gt;

&lt;p&gt;Multiply by −x&lt;br&gt;
-4x^4-4x^3-13x^2-11x&lt;/p&gt;

&lt;p&gt;Add both products&lt;br&gt;
=-4x6-4x5-17x4-15x3-13x2-11x&lt;br&gt;
Reduce powers&lt;br&gt;
-4(-x^2)-4(-x)-17(-1)-15x^3-13x^2-11x&lt;br&gt;
=4x^2+4x+17-15x^3-13x^2-11x&lt;/p&gt;

&lt;p&gt;Combine:&lt;br&gt;
=-15x^3-9x^2-7x+17&lt;br&gt;
Reduce mod 17&lt;br&gt;
-15≡2,-9≡8,-7≡10,17≡0&lt;br&gt;
=2x^3+8x^2+10x&lt;/p&gt;

&lt;p&gt;Add Both Products&lt;br&gt;
First product:&lt;br&gt;
-2x^3+x^2+8x+10&lt;/p&gt;

&lt;p&gt;Second product:&lt;br&gt;
2x^3+8x^2+10x&lt;/p&gt;

&lt;p&gt;Add:&lt;br&gt;
0x^3+ 9x^2+18x+10&lt;br&gt;
Final reduction mod 17&lt;br&gt;
17x^3≡0&lt;br&gt;
18≡1&lt;/p&gt;

&lt;p&gt;So final result:&lt;br&gt;
s^T u=9x^2+x+10&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3.2&lt;/strong&gt;: &lt;br&gt;
Compute v-s^T u&lt;br&gt;
v-s^T u=(8x^3+6x^2+9x +16)-(9x^2+x+10)=8x^3-3x^2+8x+6&lt;/p&gt;

&lt;p&gt;Reduced to 17&lt;br&gt;
    -3 = 14&lt;br&gt;
So:&lt;br&gt;
v-s^T u=8x^3+14x^2+8x+6&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3.3&lt;/strong&gt;: &lt;br&gt;
Recover the message (rounding step)&lt;br&gt;
Now it becomes apparent why we needed to scale m by making its coefficients large. If you recall, all other terms in the equation were chosen to be small. So the coefficients of m_n are either close to ⌊q/2⌉=9 implying that the original binary coefficient of m_b was a 1 or close to 0 implying the original binary coefficient was 0.&lt;br&gt;
In our example we have m_n=8x^3+14x^2+8x+6. We can recover the original scaled message m by going through the coefficients of m_n and check if they are closer to ⌊q/2⌉=9 or 0 (or equivalently q).&lt;br&gt;
So, let’s do that for all coefficients:&lt;br&gt;
    8, closer to 9 than 0 or q, round to 9&lt;br&gt;
    14, closer to q than 9, round to 0&lt;br&gt;
    8, closer to 9 than 0 or q, round to 9&lt;br&gt;
    6, closer to 9 than 0 or q, round to 9&lt;br&gt;
Our rounded polynomial is 9x^3+0x^2+9x+9, which is the scaled polynomial that we encrypted! We can now simply recover the the original binary polynomial m_b by scaling down with factor 1/9:&lt;br&gt;
m_b=1/9(9x^3+0x^2+9x+9)=(1x^3+0x^2+1x+1)&lt;/p&gt;

&lt;p&gt;From m_b we can just read the bits of the original message, which are (1011)_2=(11)_10 ┤. &lt;/p&gt;

&lt;p&gt;The recovered plaintext therefore is: 11&lt;/p&gt;

</description>
      <category>kyber</category>
      <category>quantum</category>
      <category>cryptography</category>
      <category>pqc</category>
    </item>
  </channel>
</rss>
