{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "9d9b068c",
   "metadata": {},
   "outputs": [],
   "source": [
    "import random\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "7571d345",
   "metadata": {},
   "outputs": [],
   "source": [
    "#The key k is a list/array of 16 bytes\n",
    "def rc4_init(k):\n",
    "    k = k * 16\n",
    "    S = list( range(256) )\n",
    "    \n",
    "    j = 0\n",
    "    for i in range(256):\n",
    "        j = (j + S[i] + k[i]) % 256\n",
    "        S[i], S[j] = S[j], S[i]\n",
    "    \n",
    "    return (S, 0, 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "819db7ad",
   "metadata": {},
   "outputs": [],
   "source": [
    "def rc4_next(st):\n",
    "    S, i, j = st\n",
    "    \n",
    "    i = (i + 1) % 256\n",
    "    j = (j + S[i]) % 256\n",
    "    \n",
    "    S[i], S[j] = S[j], S[i]\n",
    "\n",
    "    t = (S[i] + S[j]) % 256\n",
    "    y = S[t]\n",
    "    \n",
    "    return ( y, (S, i, j) )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "69da2468",
   "metadata": {},
   "outputs": [],
   "source": [
    "#Returns the first ell bytes output by RC4 initialized with key k\n",
    "def get_bytes(k, ell):\n",
    "    state = rc4_init(k)\n",
    "    \n",
    "    output = []\n",
    "    for i in range(ell):\n",
    "        y, state = rc4_next(state)\n",
    "        output.append(y)\n",
    "    \n",
    "    return output"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "4f8c90ee",
   "metadata": {},
   "outputs": [],
   "source": [
    "# This is the key 0x0102030405060708090A0B0C0D0E0F10\n",
    "test_key = list( range(1, 17) )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "dcc914c5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "9a c7 cc 9a 60 9d 1e f7 b2 93 28 99 cd e4 1b 97 52 48 c4 95 90 14 12 6a 6e 8a 84 f1 1d 1a 9e 1c "
     ]
    }
   ],
   "source": [
    "# Check that the first 32 bytes output using the test key match the test vectors for RC4\n",
    "for b in get_bytes(test_key, 32):\n",
    "    print(\"%02x\" % b, end=\" \")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "a5211737",
   "metadata": {},
   "outputs": [],
   "source": [
    "def random_key():\n",
    "    return [ random.randint(0, 255) for i in range(256) ]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "fb4d2d90",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Collects the n-th bytes output RC4 using many (20000) random keys, then plots an histogram of the bytes' values \n",
    "def plot_nth_byte(n):\n",
    "    nth_bytes = [ get_bytes(random_key(), n)[-1] for i in range(20000) ]\n",
    "    plt.hist(nth_bytes, bins=256, density=True); plt.ylim([0, 0.0085]);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "69e69efd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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ecz1KIxkPltbW3X27FmfmtTUVGVnZzPnIThw4ICmTZumm266ScuXL1dvb6/3PuZ45NxutyTphhtukMQ5PB4uneMLIukcJtRcgb6+Pg0NDfl9qWZycrLfl2/i8vLy8rRz50699dZbeuGFF9TT06OCggKdPn3aO5/M9dgYyXz29PQoLi5OU6ZMGbYGwRUXF+vnP/+53n77bf30pz/VsWPHdNddd6m/v18SczxSlmWpvLxcd955p7KzsyVxDo+1QHMsRd45HPJ3P8FfVFSUz23LsvzacHnFxcXef996663Kz8/X7Nmz9fLLL3vfmMZcj63RzCdzPnIlJSXef2dnZys3N1fp6el644039N3vfnfY/ZhjX0888YR+9atf+Xwf4AWcw2NjuDmOtHOYlZorMHXqVEVHR/ul0d7eXr9nDwjdpEmTdOutt+rkyZPeT0Ex12NjJPOZkpKigYEB/e53vxu2BqGZPn260tPTdfLkSUnM8Ug8+eST2rNnj9555x3deOON3nbO4bEz3BwHEu7nMKHmCsTFxclut6u5udmnvbm5WQUFBRM0KnP09/ervb1d06dPV0ZGhlJSUnzmemBgQC0tLcz1KIxkPu12u2JjY31quru79e///u/M+SidPn1aXV1dmj59uiTmOBjLsvTEE0/otdde09tvv62MjAyf+zmHr9zl5jiQsD+Hr/pbkw1TV1dnxcbGWrW1tdaHH35olZWVWZMmTbI++eSTiR5axPnRj35kHThwwPr444+tI0eOWPfdd581efJk71xu2rTJSkxMtF577TXrxIkT1kMPPWRNnz7d8ng8Ezzy8HTmzBnL5XJZLpfLkmQ9//zzlsvlsj799FPLskY2n6WlpdaNN95o7d+/33rvvfesu+66y7r99tutwcHBiTqssBJsjs+cOWP96Ec/sg4fPmx1dHRY77zzjpWfn2/9wR/8AXM8Aj/84Q+txMRE68CBA1Z3d7d3++KLL7w1nMNX5nJzHInnMKFmDGzbts1KT0+34uLirJycHJ+Pw2HkSkpKrOnTp1uxsbFWamqq9d3vftf64IMPvPefO3fOeuqpp6yUlBTLZrNZc+fOtU6cODGBIw5v77zzjiXJb1u2bJllWSObz//93/+1nnjiCeuGG26wrrvuOuu+++6zOjs7J+BowlOwOf7iiy+soqIi6+tf/7oVGxtrzZgxw1q2bJnf/DHHgQWaV0nWiy++6K3hHL4yl5vjSDyHoyzLsq7euhAAAMD44D01AADACIQaAABgBEINAAAwAqEGAAAYgVADAACMQKgBAABGINQAAAAjEGoAAIARCDUAAMAIhBoAAGAEQg0AADACoQYAABjh/wDJuob9G8Q+EAAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_nth_byte(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "9851fbb8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_nth_byte(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "074b220e",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
