{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "e279e88d",
   "metadata": {},
   "source": [
    "# Speck Analysis Notebook"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d689cc8d",
   "metadata": {},
   "source": [
    "The following block initializes the chipwhisperer, as always"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "0cccc556",
   "metadata": {},
   "outputs": [],
   "source": [
    "import chipwhisperer as cw\n",
    "import time"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "9dd8320a",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Path to the Speck .hex file for reflashing\n",
    "PATH=\"/home/juan/documents/master-aits/subjects/implementation_attacks_and_countermeasures/praktikum/speck_cpa_cw/cw_firmware/simple-speck-CWLITEARM.hex\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "d7f94c82",
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'scope' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m/tmp/ipykernel_851327/1933793010.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mscope\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdis\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m: name 'scope' is not defined"
     ]
    }
   ],
   "source": [
    "scope.dis()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "7793787d",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING:ChipWhisperer NAEUSB:Your firmware is outdated - latest is 0.30. Suggested to update firmware, as you may experience errors\n",
      "See https://chipwhisperer.readthedocs.io/en/latest/api.html#firmware-update\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO: Found ChipWhispereršŸ˜\n"
     ]
    }
   ],
   "source": [
    "def flash(scope, prog):\n",
    "    cw.program_target(scope, prog, PATH)\n",
    "\n",
    "def reset_target(scope):\n",
    "    scope.io.nrst = 'low'\n",
    "    time.sleep(0.05)\n",
    "    scope.io.nrst = 'high_z'\n",
    "    time.sleep(0.05)\n",
    "\n",
    "try:\n",
    "    if not scope.connectStatus:\n",
    "        scope.con()\n",
    "except NameError:\n",
    "    scope = cw.scope()\n",
    "\n",
    "try:\n",
    "    target = cw.target(scope)\n",
    "except IOError:\n",
    "    print(\"INFO: Caught exception on reconnecting to target - attempting to reconnect to scope first.\")\n",
    "    print(\"INFO: This is a work-around when USB has died without Python knowing. Ignore errors above this line.\")\n",
    "    scope = cw.scope()\n",
    "    target = cw.target(scope)\n",
    "\n",
    "print(\"INFO: Found ChipWhispereršŸ˜\")\n",
    "\n",
    "prog = cw.programmers.STM32FProgrammer\n",
    "time.sleep(0.05)\n",
    "scope.default_setup()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bfd1f6a6",
   "metadata": {},
   "source": [
    "**Reset the target if required:**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "4cc49970",
   "metadata": {},
   "outputs": [],
   "source": [
    "reset_target(scope)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fe784f48",
   "metadata": {},
   "source": [
    "**Reflash the target if required:**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "de6112ec",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Detected known STMF32: STM32F302xB(C)/303xB(C)\n",
      "Extended erase (0x44), this can take ten seconds or more\n",
      "Attempting to program 5815 bytes at 0x8000000\n",
      "STM32F Programming flash...\n",
      "STM32F Reading flash...\n",
      "Verified flash OK, 5815 bytes\n"
     ]
    }
   ],
   "source": [
    "flash(scope, prog)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "86a7ff43",
   "metadata": {},
   "source": [
    "**Set an encryption key:**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "103040b9",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 32 bytes of encryption key\n",
    "encryption_key = b\"\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\x09\\x0a\\x0b\\x0c\\x0d\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f\"\n",
    "\n",
    "if len(encryption_key) == 32:\n",
    "    target.simpleserial_write(\"s\", encryption_key)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9bfa204a",
   "metadata": {},
   "source": [
    "**Get the encryption key:**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "bdfe5aba",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CWbytearray(b'01 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f')\n"
     ]
    }
   ],
   "source": [
    "target.simpleserial_write(\"k\", b'\\x00'*16)\n",
    "print(target.simpleserial_read(\"o\", 32))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "512daee1",
   "metadata": {},
   "source": [
    "**Encrypt a 16-byte block:**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "180eb01b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CWbytearray(b'43 8f 18 9c 8d b4 ee 4e 3e f5 c0 05 04 01 09 41')\n"
     ]
    }
   ],
   "source": [
    "pt = b\"\\x70\\x6f\\x6f\\x6e\\x65\\x72\\x2e\\x20\\x49\\x6e\\x20\\x74\\x68\\x6f\\x73\\x65\"\n",
    "target.simpleserial_write(\"e\", pt)\n",
    "print(target.simpleserial_read(\"c\", 16))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "95dbb710",
   "metadata": {},
   "source": [
    "**Plot the power consumption of the encryption step:**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "ffaaccc9",
   "metadata": {},
   "outputs": [],
   "source": [
    "# needs to be better (doesn't seem to work fine in this case... (cw crashes))\n",
    "def trace_encryption():\n",
    "    global scope, target\n",
    "    pt = b\"\\x70\\x6f\\x6f\\x6e\\x65\\x72\\x2e\\x20\\x49\\x6e\\x20\\x74\\x68\\x6f\\x73\\x65\"\n",
    "    return cw.capture_trace(scope, target, pt, b\"e\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "fe9e08b6",
   "metadata": {},
   "outputs": [],
   "source": [
    "#reset_target(scope)\n",
    "powertrace = trace_encryption()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "4e472e21",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "/* global mpl */\n",
       "window.mpl = {};\n",
       "\n",
       "mpl.get_websocket_type = function () {\n",
       "    if (typeof WebSocket !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof MozWebSocket !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert(\n",
       "            'Your browser does not have WebSocket support. ' +\n",
       "                'Please try Chrome, Safari or Firefox ≄ 6. ' +\n",
       "                'Firefox 4 and 5 are also supported but you ' +\n",
       "                'have to enable WebSockets in about:config.'\n",
       "        );\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = this.ws.binaryType !== undefined;\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById('mpl-warnings');\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent =\n",
       "                'This browser does not support binary websocket messages. ' +\n",
       "                'Performance may be slow.';\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = document.createElement('div');\n",
       "    this.root.setAttribute('style', 'display: inline-block');\n",
       "    this._root_extra_style(this.root);\n",
       "\n",
       "    parent_element.appendChild(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen = function () {\n",
       "        fig.send_message('supports_binary', { value: fig.supports_binary });\n",
       "        fig.send_message('send_image_mode', {});\n",
       "        if (fig.ratio !== 1) {\n",
       "            fig.send_message('set_dpi_ratio', { dpi_ratio: fig.ratio });\n",
       "        }\n",
       "        fig.send_message('refresh', {});\n",
       "    };\n",
       "\n",
       "    this.imageObj.onload = function () {\n",
       "        if (fig.image_mode === 'full') {\n",
       "            // Full images could contain transparency (where diff images\n",
       "            // almost always do), so we need to clear the canvas so that\n",
       "            // there is no ghosting.\n",
       "            fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "        }\n",
       "        fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "    };\n",
       "\n",
       "    this.imageObj.onunload = function () {\n",
       "        fig.ws.close();\n",
       "    };\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._init_header = function () {\n",
       "    var titlebar = document.createElement('div');\n",
       "    titlebar.classList =\n",
       "        'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n",
       "    var titletext = document.createElement('div');\n",
       "    titletext.classList = 'ui-dialog-title';\n",
       "    titletext.setAttribute(\n",
       "        'style',\n",
       "        'width: 100%; text-align: center; padding: 3px;'\n",
       "    );\n",
       "    titlebar.appendChild(titletext);\n",
       "    this.root.appendChild(titlebar);\n",
       "    this.header = titletext;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function () {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = (this.canvas_div = document.createElement('div'));\n",
       "    canvas_div.setAttribute(\n",
       "        'style',\n",
       "        'border: 1px solid #ddd;' +\n",
       "            'box-sizing: content-box;' +\n",
       "            'clear: both;' +\n",
       "            'min-height: 1px;' +\n",
       "            'min-width: 1px;' +\n",
       "            'outline: 0;' +\n",
       "            'overflow: hidden;' +\n",
       "            'position: relative;' +\n",
       "            'resize: both;'\n",
       "    );\n",
       "\n",
       "    function on_keyboard_event_closure(name) {\n",
       "        return function (event) {\n",
       "            return fig.key_event(event, name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    canvas_div.addEventListener(\n",
       "        'keydown',\n",
       "        on_keyboard_event_closure('key_press')\n",
       "    );\n",
       "    canvas_div.addEventListener(\n",
       "        'keyup',\n",
       "        on_keyboard_event_closure('key_release')\n",
       "    );\n",
       "\n",
       "    this._canvas_extra_style(canvas_div);\n",
       "    this.root.appendChild(canvas_div);\n",
       "\n",
       "    var canvas = (this.canvas = document.createElement('canvas'));\n",
       "    canvas.classList.add('mpl-canvas');\n",
       "    canvas.setAttribute('style', 'box-sizing: content-box;');\n",
       "\n",
       "    this.context = canvas.getContext('2d');\n",
       "\n",
       "    var backingStore =\n",
       "        this.context.backingStorePixelRatio ||\n",
       "        this.context.webkitBackingStorePixelRatio ||\n",
       "        this.context.mozBackingStorePixelRatio ||\n",
       "        this.context.msBackingStorePixelRatio ||\n",
       "        this.context.oBackingStorePixelRatio ||\n",
       "        this.context.backingStorePixelRatio ||\n",
       "        1;\n",
       "\n",
       "    this.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n",
       "        'canvas'\n",
       "    ));\n",
       "    rubberband_canvas.setAttribute(\n",
       "        'style',\n",
       "        'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n",
       "    );\n",
       "\n",
       "    // Apply a ponyfill if ResizeObserver is not implemented by browser.\n",
       "    if (this.ResizeObserver === undefined) {\n",
       "        if (window.ResizeObserver !== undefined) {\n",
       "            this.ResizeObserver = window.ResizeObserver;\n",
       "        } else {\n",
       "            var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n",
       "            this.ResizeObserver = obs.ResizeObserver;\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n",
       "        var nentries = entries.length;\n",
       "        for (var i = 0; i < nentries; i++) {\n",
       "            var entry = entries[i];\n",
       "            var width, height;\n",
       "            if (entry.contentBoxSize) {\n",
       "                if (entry.contentBoxSize instanceof Array) {\n",
       "                    // Chrome 84 implements new version of spec.\n",
       "                    width = entry.contentBoxSize[0].inlineSize;\n",
       "                    height = entry.contentBoxSize[0].blockSize;\n",
       "                } else {\n",
       "                    // Firefox implements old version of spec.\n",
       "                    width = entry.contentBoxSize.inlineSize;\n",
       "                    height = entry.contentBoxSize.blockSize;\n",
       "                }\n",
       "            } else {\n",
       "                // Chrome <84 implements even older version of spec.\n",
       "                width = entry.contentRect.width;\n",
       "                height = entry.contentRect.height;\n",
       "            }\n",
       "\n",
       "            // Keep the size of the canvas and rubber band canvas in sync with\n",
       "            // the canvas container.\n",
       "            if (entry.devicePixelContentBoxSize) {\n",
       "                // Chrome 84 implements new version of spec.\n",
       "                canvas.setAttribute(\n",
       "                    'width',\n",
       "                    entry.devicePixelContentBoxSize[0].inlineSize\n",
       "                );\n",
       "                canvas.setAttribute(\n",
       "                    'height',\n",
       "                    entry.devicePixelContentBoxSize[0].blockSize\n",
       "                );\n",
       "            } else {\n",
       "                canvas.setAttribute('width', width * fig.ratio);\n",
       "                canvas.setAttribute('height', height * fig.ratio);\n",
       "            }\n",
       "            canvas.setAttribute(\n",
       "                'style',\n",
       "                'width: ' + width + 'px; height: ' + height + 'px;'\n",
       "            );\n",
       "\n",
       "            rubberband_canvas.setAttribute('width', width);\n",
       "            rubberband_canvas.setAttribute('height', height);\n",
       "\n",
       "            // And update the size in Python. We ignore the initial 0/0 size\n",
       "            // that occurs as the element is placed into the DOM, which should\n",
       "            // otherwise not happen due to the minimum size styling.\n",
       "            if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n",
       "                fig.request_resize(width, height);\n",
       "            }\n",
       "        }\n",
       "    });\n",
       "    this.resizeObserverInstance.observe(canvas_div);\n",
       "\n",
       "    function on_mouse_event_closure(name) {\n",
       "        return function (event) {\n",
       "            return fig.mouse_event(event, name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousedown',\n",
       "        on_mouse_event_closure('button_press')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseup',\n",
       "        on_mouse_event_closure('button_release')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'dblclick',\n",
       "        on_mouse_event_closure('dblclick')\n",
       "    );\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousemove',\n",
       "        on_mouse_event_closure('motion_notify')\n",
       "    );\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseenter',\n",
       "        on_mouse_event_closure('figure_enter')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseleave',\n",
       "        on_mouse_event_closure('figure_leave')\n",
       "    );\n",
       "\n",
       "    canvas_div.addEventListener('wheel', function (event) {\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        on_mouse_event_closure('scroll')(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.appendChild(canvas);\n",
       "    canvas_div.appendChild(rubberband_canvas);\n",
       "\n",
       "    this.rubberband_context = rubberband_canvas.getContext('2d');\n",
       "    this.rubberband_context.strokeStyle = '#000000';\n",
       "\n",
       "    this._resize_canvas = function (width, height, forward) {\n",
       "        if (forward) {\n",
       "            canvas_div.style.width = width + 'px';\n",
       "            canvas_div.style.height = height + 'px';\n",
       "        }\n",
       "    };\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n",
       "        event.preventDefault();\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus() {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function () {\n",
       "    var fig = this;\n",
       "\n",
       "    var toolbar = document.createElement('div');\n",
       "    toolbar.classList = 'mpl-toolbar';\n",
       "    this.root.appendChild(toolbar);\n",
       "\n",
       "    function on_click_closure(name) {\n",
       "        return function (_event) {\n",
       "            return fig.toolbar_button_onclick(name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    function on_mouseover_closure(tooltip) {\n",
       "        return function (event) {\n",
       "            if (!event.currentTarget.disabled) {\n",
       "                return fig.toolbar_button_onmouseover(tooltip);\n",
       "            }\n",
       "        };\n",
       "    }\n",
       "\n",
       "    fig.buttons = {};\n",
       "    var buttonGroup = document.createElement('div');\n",
       "    buttonGroup.classList = 'mpl-button-group';\n",
       "    for (var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            /* Instead of a spacer, we start a new button group. */\n",
       "            if (buttonGroup.hasChildNodes()) {\n",
       "                toolbar.appendChild(buttonGroup);\n",
       "            }\n",
       "            buttonGroup = document.createElement('div');\n",
       "            buttonGroup.classList = 'mpl-button-group';\n",
       "            continue;\n",
       "        }\n",
       "\n",
       "        var button = (fig.buttons[name] = document.createElement('button'));\n",
       "        button.classList = 'mpl-widget';\n",
       "        button.setAttribute('role', 'button');\n",
       "        button.setAttribute('aria-disabled', 'false');\n",
       "        button.addEventListener('click', on_click_closure(method_name));\n",
       "        button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
       "\n",
       "        var icon_img = document.createElement('img');\n",
       "        icon_img.src = '_images/' + image + '.png';\n",
       "        icon_img.srcset = '_images/' + image + '_large.png 2x';\n",
       "        icon_img.alt = tooltip;\n",
       "        button.appendChild(icon_img);\n",
       "\n",
       "        buttonGroup.appendChild(button);\n",
       "    }\n",
       "\n",
       "    if (buttonGroup.hasChildNodes()) {\n",
       "        toolbar.appendChild(buttonGroup);\n",
       "    }\n",
       "\n",
       "    var fmt_picker = document.createElement('select');\n",
       "    fmt_picker.classList = 'mpl-widget';\n",
       "    toolbar.appendChild(fmt_picker);\n",
       "    this.format_dropdown = fmt_picker;\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = document.createElement('option');\n",
       "        option.selected = fmt === mpl.default_extension;\n",
       "        option.innerHTML = fmt;\n",
       "        fmt_picker.appendChild(option);\n",
       "    }\n",
       "\n",
       "    var status_bar = document.createElement('span');\n",
       "    status_bar.classList = 'mpl-message';\n",
       "    toolbar.appendChild(status_bar);\n",
       "    this.message = status_bar;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', { width: x_pixels, height: y_pixels });\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.send_message = function (type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function () {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_save = function (fig, _msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function (fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1], msg['forward']);\n",
       "        fig.send_message('refresh', {});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n",
       "    var x0 = msg['x0'] / fig.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n",
       "    var x1 = msg['x1'] / fig.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0,\n",
       "        0,\n",
       "        fig.canvas.width / fig.ratio,\n",
       "        fig.canvas.height / fig.ratio\n",
       "    );\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch (cursor) {\n",
       "        case 0:\n",
       "            cursor = 'pointer';\n",
       "            break;\n",
       "        case 1:\n",
       "            cursor = 'default';\n",
       "            break;\n",
       "        case 2:\n",
       "            cursor = 'crosshair';\n",
       "            break;\n",
       "        case 3:\n",
       "            cursor = 'move';\n",
       "            break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_message = function (fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n",
       "    for (var key in msg) {\n",
       "        if (!(key in fig.buttons)) {\n",
       "            continue;\n",
       "        }\n",
       "        fig.buttons[key].disabled = !msg[key];\n",
       "        fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n",
       "    if (msg['mode'] === 'PAN') {\n",
       "        fig.buttons['Pan'].classList.add('active');\n",
       "        fig.buttons['Zoom'].classList.remove('active');\n",
       "    } else if (msg['mode'] === 'ZOOM') {\n",
       "        fig.buttons['Pan'].classList.remove('active');\n",
       "        fig.buttons['Zoom'].classList.add('active');\n",
       "    } else {\n",
       "        fig.buttons['Pan'].classList.remove('active');\n",
       "        fig.buttons['Zoom'].classList.remove('active');\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function () {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message('ack', {});\n",
       "};\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function (fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            var img = evt.data;\n",
       "            if (img.type !== 'image/png') {\n",
       "                /* FIXME: We get \"Resource interpreted as Image but\n",
       "                 * transferred with MIME type text/plain:\" errors on\n",
       "                 * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "                 * to be part of the websocket stream */\n",
       "                img.type = 'image/png';\n",
       "            }\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src\n",
       "                );\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                img\n",
       "            );\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        } else if (\n",
       "            typeof evt.data === 'string' &&\n",
       "            evt.data.slice(0, 21) === 'data:image/png;base64'\n",
       "        ) {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig['handle_' + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\n",
       "                \"No handler for the '\" + msg_type + \"' message type: \",\n",
       "                msg\n",
       "            );\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\n",
       "                    \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n",
       "                    e,\n",
       "                    e.stack,\n",
       "                    msg\n",
       "                );\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "};\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function (e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e) {\n",
       "        e = window.event;\n",
       "    }\n",
       "    if (e.target) {\n",
       "        targ = e.target;\n",
       "    } else if (e.srcElement) {\n",
       "        targ = e.srcElement;\n",
       "    }\n",
       "    if (targ.nodeType === 3) {\n",
       "        // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "    }\n",
       "\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    var boundingRect = targ.getBoundingClientRect();\n",
       "    var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n",
       "    var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n",
       "\n",
       "    return { x: x, y: y };\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys(original) {\n",
       "    return Object.keys(original).reduce(function (obj, key) {\n",
       "        if (typeof original[key] !== 'object') {\n",
       "            obj[key] = original[key];\n",
       "        }\n",
       "        return obj;\n",
       "    }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function (event, name) {\n",
       "    var canvas_pos = mpl.findpos(event);\n",
       "\n",
       "    if (name === 'button_press') {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * this.ratio;\n",
       "    var y = canvas_pos.y * this.ratio;\n",
       "\n",
       "    this.send_message(name, {\n",
       "        x: x,\n",
       "        y: y,\n",
       "        button: event.button,\n",
       "        step: event.step,\n",
       "        guiEvent: simpleKeys(event),\n",
       "    });\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.key_event = function (event, name) {\n",
       "    // Prevent repeat events\n",
       "    if (name === 'key_press') {\n",
       "        if (event.key === this._key) {\n",
       "            return;\n",
       "        } else {\n",
       "            this._key = event.key;\n",
       "        }\n",
       "    }\n",
       "    if (name === 'key_release') {\n",
       "        this._key = null;\n",
       "    }\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.key !== 'Control') {\n",
       "        value += 'ctrl+';\n",
       "    }\n",
       "    else if (event.altKey && event.key !== 'Alt') {\n",
       "        value += 'alt+';\n",
       "    }\n",
       "    else if (event.shiftKey && event.key !== 'Shift') {\n",
       "        value += 'shift+';\n",
       "    }\n",
       "\n",
       "    value += 'k' + event.key;\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n",
       "    return false;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n",
       "    if (name === 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message('toolbar_button', { name: name });\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "\n",
       "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n",
       "// prettier-ignore\n",
       "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";/* global mpl */\n",
       "\n",
       "var comm_websocket_adapter = function (comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.binaryType = comm.kernel.ws.binaryType;\n",
       "    ws.readyState = comm.kernel.ws.readyState;\n",
       "    function updateReadyState(_event) {\n",
       "        if (comm.kernel.ws) {\n",
       "            ws.readyState = comm.kernel.ws.readyState;\n",
       "        } else {\n",
       "            ws.readyState = 3; // Closed state.\n",
       "        }\n",
       "    }\n",
       "    comm.kernel.ws.addEventListener('open', updateReadyState);\n",
       "    comm.kernel.ws.addEventListener('close', updateReadyState);\n",
       "    comm.kernel.ws.addEventListener('error', updateReadyState);\n",
       "\n",
       "    ws.close = function () {\n",
       "        comm.close();\n",
       "    };\n",
       "    ws.send = function (m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function (msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        var data = msg['content']['data'];\n",
       "        if (data['blob'] !== undefined) {\n",
       "            data = {\n",
       "                data: new Blob(msg['buffers'], { type: data['blob'] }),\n",
       "            };\n",
       "        }\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(data);\n",
       "    });\n",
       "    return ws;\n",
       "};\n",
       "\n",
       "mpl.mpl_figure_comm = function (comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = document.getElementById(id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm);\n",
       "\n",
       "    function ondownload(figure, _format) {\n",
       "        window.open(figure.canvas.toDataURL());\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element;\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error('Failed to find cell for figure', id, fig);\n",
       "        return;\n",
       "    }\n",
       "    fig.cell_info[0].output_area.element.on(\n",
       "        'cleared',\n",
       "        { fig: fig },\n",
       "        fig._remove_fig_handler\n",
       "    );\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function (fig, msg) {\n",
       "    var width = fig.canvas.width / fig.ratio;\n",
       "    fig.cell_info[0].output_area.element.off(\n",
       "        'cleared',\n",
       "        fig._remove_fig_handler\n",
       "    );\n",
       "    fig.resizeObserverInstance.unobserve(fig.canvas_div);\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable();\n",
       "    fig.parent_element.innerHTML =\n",
       "        '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "    fig.close_ws(fig, msg);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.close_ws = function (fig, msg) {\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function (_remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width / this.ratio;\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] =\n",
       "        '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function () {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message('ack', {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () {\n",
       "        fig.push_to_output();\n",
       "    }, 1000);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function () {\n",
       "    var fig = this;\n",
       "\n",
       "    var toolbar = document.createElement('div');\n",
       "    toolbar.classList = 'btn-toolbar';\n",
       "    this.root.appendChild(toolbar);\n",
       "\n",
       "    function on_click_closure(name) {\n",
       "        return function (_event) {\n",
       "            return fig.toolbar_button_onclick(name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    function on_mouseover_closure(tooltip) {\n",
       "        return function (event) {\n",
       "            if (!event.currentTarget.disabled) {\n",
       "                return fig.toolbar_button_onmouseover(tooltip);\n",
       "            }\n",
       "        };\n",
       "    }\n",
       "\n",
       "    fig.buttons = {};\n",
       "    var buttonGroup = document.createElement('div');\n",
       "    buttonGroup.classList = 'btn-group';\n",
       "    var button;\n",
       "    for (var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            /* Instead of a spacer, we start a new button group. */\n",
       "            if (buttonGroup.hasChildNodes()) {\n",
       "                toolbar.appendChild(buttonGroup);\n",
       "            }\n",
       "            buttonGroup = document.createElement('div');\n",
       "            buttonGroup.classList = 'btn-group';\n",
       "            continue;\n",
       "        }\n",
       "\n",
       "        button = fig.buttons[name] = document.createElement('button');\n",
       "        button.classList = 'btn btn-default';\n",
       "        button.href = '#';\n",
       "        button.title = name;\n",
       "        button.innerHTML = '<i class=\"fa ' + image + ' fa-lg\"></i>';\n",
       "        button.addEventListener('click', on_click_closure(method_name));\n",
       "        button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
       "        buttonGroup.appendChild(button);\n",
       "    }\n",
       "\n",
       "    if (buttonGroup.hasChildNodes()) {\n",
       "        toolbar.appendChild(buttonGroup);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = document.createElement('span');\n",
       "    status_bar.classList = 'mpl-message pull-right';\n",
       "    toolbar.appendChild(status_bar);\n",
       "    this.message = status_bar;\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = document.createElement('div');\n",
       "    buttongrp.classList = 'btn-group inline pull-right';\n",
       "    button = document.createElement('button');\n",
       "    button.classList = 'btn btn-mini btn-primary';\n",
       "    button.href = '#';\n",
       "    button.title = 'Stop Interaction';\n",
       "    button.innerHTML = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\n",
       "    button.addEventListener('click', function (_evt) {\n",
       "        fig.handle_close(fig, {});\n",
       "    });\n",
       "    button.addEventListener(\n",
       "        'mouseover',\n",
       "        on_mouseover_closure('Stop Interaction')\n",
       "    );\n",
       "    buttongrp.appendChild(button);\n",
       "    var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n",
       "    titlebar.insertBefore(buttongrp, titlebar.firstChild);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._remove_fig_handler = function (event) {\n",
       "    var fig = event.data.fig;\n",
       "    if (event.target !== this) {\n",
       "        // Ignore bubbled events from children.\n",
       "        return;\n",
       "    }\n",
       "    fig.close_ws(fig, {});\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function (el) {\n",
       "    el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function (el) {\n",
       "    // this is important to make the div 'focusable\n",
       "    el.setAttribute('tabindex', 0);\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    } else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function (event, _name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager) {\n",
       "        manager = IPython.keyboard_manager;\n",
       "    }\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which === 13) {\n",
       "        this.canvas_div.blur();\n",
       "        // select the cell after this one\n",
       "        var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
       "        IPython.notebook.select(index + 1);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_save = function (fig, _msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "};\n",
       "\n",
       "mpl.find_output_cell = function (html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i = 0; i < ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code') {\n",
       "            for (var j = 0; j < cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] === html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "};\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel !== null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target(\n",
       "        'matplotlib',\n",
       "        mpl.mpl_figure_comm\n",
       "    );\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,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ihYtCg899BCsWLECXn/9dShYsCB88803Kf2+UfLll1/C119/Db/++iusXr0aHn30UShUqBAsW7YMAKScw+Cnn36CU045Bc466yyLAEpZ+2fQoEFw5plnwubNm49N27ZtO7Zcyjg6RABjRuPGjeGee+45Nn/kyBGoVKkSDBkyJMKtSh+wAB49ehQqVKgAL7744rHXdu7cCYULF4bx48cDAMCKFSvAMAyYP3/+scykSZOgQIECsHHjRgAwr8qUKVMGcnJyjmX69+9v+U82P7F161YwDANmzJgBAGaZFipUCD755JNjmZUrV4JhGDBnzhwAMEX9uOOOs/x3/+abb0LJkiWPlWu/fv3gzDPPtHxWly5doE2bNmF/pVhTpkwZGDlypJRzCOzZswdq164N3333HbRs2fKYAEpZB8OgQYOgQYMGtsukjKNFBDBG5OTkQMGCBZOuYN18883QqVOniLYqvcACuHbtWjAMAxYtWmTJXXjhhXDfffcBAMCoUaOgdOnSluW5ublQsGBBmDBhAgAA3HTTTdC5c2dLZurUqWAYBvzzzz9hfJVY89tvv4FhGLB06VIAAJgyZQoYhgE7duyw5KpVqwavvPIKAAAMHDgw6USwbt06MAwDfv75ZwAAuOCCCyxXYAAA3nnnHShZsmRYXyXWHD58GMaPHw9ZWVmwfPlyKecQuPnmm+GBBx4AALAIoJR1MAwaNAiKFi0KFStWhBo1akC3bt1gw4YNACBlHDUigDFi48aNYBgG/Pjjj5bX+/btC40bN45oq9ILLICzZ88GwzBg06ZNlty1114L1113HQAADB48GOrUqZO0rnLlysGwYcMAAODSSy+FXr16WZYvX74cDMOAFStWBP01Ys2RI0fg8ssvhxYtWhx7bezYsZCVlZWUPe+886Bfv34AAHD77bfDZZddZlm+b98+MAzjWBu32rVrw7PPPmvJfP3112AYBuzfvz/orxJblixZAsWKFYOCBQtCqVKl4OuvvwYAKeegGT9+PNSrV+9YcxBdAKWsg2HixInw8ccfw+LFi+Gbb76BZs2aQbVq1WD37t1SxhEjAhgjRAD9IwIYPnfeeSdUr14dsrOzj70mB/JgycnJgd9++w0WLFgAAwYMgLJly8Ly5culnAPkjz/+gJNPPhkWL1587DURwPDZsWMHlCxZEkaOHCllHDEigDFCbgH7R24Bh8s999wDVapUgXXr1llel1s54dKqVSvo1auXlHOAfPbZZ2AYBhQsWPDYZBgGFChQAAoWLAjff/+9lHVINGrUCAYMGCD1OWJEAGNG48aN4d577z02f+TIEahcubI8BELE6SGQl1566dhru3btsn0IZMGCBccykydPtn0I5NChQ8cyjzzySL55COTo0aNwzz33QKVKlZK60AFINOb+9NNPj722atUq28bc+hPtw4cPh5IlSx4b6L1fv35Qr149y7q7du2a7xtzX3zxxdC9e3cp5wDZvXs3LF261DI1atQIbrzxRli6dKmUdUjs2bMHypQpA6+99pqUccSIAMaMDz/8EAoXLgxjxoyBFStWQK9evaB06dJJ/SIJCfbs2QOLFi2CRYsWgWEY8Morr8CiRYuONTR+7rnnoHTp0vDFF1/AkiVLoHPnzrbdwDRs2BDmzZsHs2bNgtq1a1u6gdm5cyeUL18ebrrpJli2bBl8+OGHULRo0XzTDcxdd90FpUqVgunTp1u6c9Bvr9x5551QrVo1mDp1KixYsACaNWsGzZo1O7Zcdedw2WWXwS+//ALffPMNlCtXzrY7h759+8LKlSth6NCh+a47hwEDBsCMGTNg/fr1sGTJEhgwYAAUKFAAvv32WwCQcg4T/RYwgJR1EPTp0wemT58O69evh9mzZ0Pr1q2hbNmysHXrVgCQMo4SEcAY8vrrr0O1atUgKysLGjduDHPnzo16k2LNtGnTkjoaNQwDunfvDgCJjqDLly8PhQsXhlatWsHq1ast69i+fTt07doVihcvDiVLloQePXq4dgRduXJleO6551L1FSPHrnwNw7B0tqo6dC1TpgwULVoUrrzySti8ebNlPb///ju0a9cOihQpAmXLloU+ffrYduh69tlnQ1ZWFtSsWTPfdejas2dPqF69OmRlZUG5cuWgVatWx+QPQMo5TLAASln7p0uXLlCxYkXIysqCypUrQ5cuXWDNmjXHlksZR4cIoCAIgiAIQj5DBFAQBEEQBCGfIQIoCIIgCIKQzxABFARBEARByGeIAAqCIAiCIOQzRAAFQRAEQRDyGSKAgiAIgiAI+QwRQEEQBEEQhHyGCKAgCIIgCEI+QwRQEARBEAQhnyECKAiCIAiCkM8QARQEQRAEQchniAAKgiAIgiDkM0QABUEQBEEQ8hkigIIgCIIgCPkMEUBBEARBEIR8hgigIAiCIAhCPkMEUBAEQRAEIZ8hAigIgiAIgpDPEAEUBEEQBEHIZ4gACoIgCIIg5DNEAAVBEARBEPIZIoCCIAiCIAj5DBFAQRAEQRCEfIYIoCAIgiAIQj5DBFAQBEEQBCGfIQIoCIIgCIKQzxABFARBEARByGeIAAqCIAiCIOQzRAAFQRAEQRDyGSKAgiAIgiAI+QwRQEEQBEEQhHzG/wFwQEOC4yDyXwAAAABJRU5ErkJggg==\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib notebook\n",
    "import matplotlib.pylab as plt\n",
    "\n",
    "plt.figure()\n",
    "plt.plot(powertrace.wave, \"r\")\n",
    "plt.show()\n",
    "scope.dis()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3d215831",
   "metadata": {},
   "source": [
    "## Further Todos\n",
    "\n",
    "* [ ] Improve Capture Function\n",
    "* [ ] Capture the different phases of Speck encryption\n",
    "* [ ] Correlation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a56a4fc2",
   "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.9.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}