{"id":25415755,"url":"https://github.com/hussamsh/nova","last_synced_at":"2026-05-04T11:31:24.829Z","repository":{"id":84940591,"uuid":"256874851","full_name":"hussamsh/Nova","owner":"hussamsh","description":"Image Cryptography application based on chaotic maps built with Typescript and ElectronJS :electron: ","archived":false,"fork":false,"pushed_at":"2020-06-19T13:07:18.000Z","size":14381,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-25T11:57:33.472Z","etag":null,"topics":["chaos","chaotic-map","cryptography","dynamical-systems","electron","images","maps","react"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hussamsh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-04-18T23:37:32.000Z","updated_at":"2024-03-28T10:09:29.000Z","dependencies_parsed_at":"2023-03-13T03:29:53.005Z","dependency_job_id":null,"html_url":"https://github.com/hussamsh/Nova","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/hussamsh/Nova","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hussamsh%2FNova","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hussamsh%2FNova/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hussamsh%2FNova/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hussamsh%2FNova/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hussamsh","download_url":"https://codeload.github.com/hussamsh/Nova/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hussamsh%2FNova/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32605714,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-04T10:08:07.713Z","status":"ssl_error","status_checked_at":"2026-05-04T10:08:02.005Z","response_time":58,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chaos","chaotic-map","cryptography","dynamical-systems","electron","images","maps","react"],"created_at":"2025-02-16T15:52:28.355Z","updated_at":"2026-05-04T11:31:24.810Z","avatar_url":"https://github.com/hussamsh.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\u003cimg src=\"app/assets/images/banner.png\" width=\"15000\"\u003e\n\n\u003c!-- PROJECT LOGO --\u003e\n\u003cbr /\u003e\n\n\u003cp align=\"center\"\u003e\n\n\u003cp align=\"center\"\u003e\n\n  \u003ca aria-label=\"Hossam logo\" href=\"http://hossamsherif.com\"\u003e\n    \u003cimg src=\"app/assets/images/madebyhos.png\" width=\"150\"\u003e\n  \u003c/a\u003e\n\n \u003c/p\u003e\n\n \u003cdiv align=\"center\"\u003e\n\n  ![Build](https://github.com/hussamsh/Nova/workflows/Build/badge.svg)\n  ![CI](https://github.com/hussamsh/Nova/workflows/CI/badge.svg)\n\n  \u003c/div\u003e\n\n  \u003cp align=\"center\"\u003e\n    A cryptography application for images based on chaotic maps\n    \u003cbr /\u003e\n    \u003cbr /\u003e\n    \u003ca href=\"https://github.com/github_username/repo/issues\"\u003eReport Bug\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/github_username/repo/issues\"\u003eRequest Feature\u003c/a\u003e\n\n  \u003c/p\u003e\n\n\u003c/p\u003e\n\n\n\u003c!-- TABLE OF CONTENTS --\u003e\n## Table of Contents\n\n- [Table of Contents](#table-of-contents)\n- [About The Project](#about-the-project)\n  - [Built With](#built-with)\n- [Getting Started](#getting-started)\n  - [Download](#download)\n  - [Usage](#usage)\n  - [Remarks](#remarks)\n- [Security](#security)\n- [Examples](#examples)\n- [Valid inputs](#valid-inputs)\n- [Roadmap](#roadmap)\n- [Development](#development)\n  - [Prerequisites](#prerequisites)\n  - [Installation](#installation)\n- [C++ implementation](#c-implementation)\n- [License](#license)\n- [Contact](#contact)\n\n\u003c!-- ABOUT THE PROJECT --\u003e\n## About The Project\n\nNova's idea is to become a software equivalent for a part of my research on hardware implementations of chaotic ciphers, it utilizes `chaotic maps` and pixel by pixel encryption algorithms to cipher images.\n\nI have already published part of my research if you would like to read more\n\n**CLA based Floating-point adder suitable for chaotic generators on FPGA** on [IEEEXplore](https://ieeexplore.ieee.org/document/8704074)\u003cbr\u003e\n**Double humped based image encryption system on FPGA** (_under review_)\n\n[![Product Name Screen Shot][product-screenshot]]()\n\n*Nova currently implements three chaotic maps*\n* **Logistic map** \n  Based on Robert May's [work](https://www.researchgate.net/publication/237005499_Simple_Mathematical_Models_With_Very_Complicated_Dynamics) back in 1976, the logistic map is the most iconic and heavily researched chaotic maps in his history.\n* **Double humped map**\n  Popularized by [Coiteux](https://core.ac.uk/download/pdf/61733598.pdf) in 2014, the double humped map shows a double hump in it's first iteration - hence the name - and exhibits some unique behavior that mkes it highly suitable for cryptographic operations.\n* **Hénon map**\n    Another widely recognized map, introduced by Micheal Hénon as a simplified model of the Poincaré section of the Lorenz model. \n\n\n### Built With\n\n* [Electron](https://www.electronjs.org/)\n* [React](https://reactjs.org/)\n\n\n\u003c!-- GETTING STARTED --\u003e\n## Getting Started\n\n### Download\nDownload the latset stable distribution for your OS.\n\n[![windows 10][windows]](https://s3.eu-central-1.amazonaws.com/com.hossamsherif.nova/release-builds/nova-windows.zip) \n[![macos][macos]](https://s3.eu-central-1.amazonaws.com/com.hossamsherif.nova/release-builds/nova-macOs.zip) \n[![linux][linux]](https://s3.eu-central-1.amazonaws.com/com.hossamsherif.nova/release-builds/nova-linux.zip) \n\n### Usage\n\nSee the attached gif above.\n\n**Step 1 )**  Choose the desired image for encryption / decryption by drag-drop or clicking browse in the designated area. \n\n\n**Step 2 )**  Enter the desired params for your choosen map as well as an output directory for the processed image.\n\n**Step 3 )**  Press Encrypt / Decrypt and wait for your image to be processed. Once finished you will find the processed image in the output directory with a suffix of either _encrypted / _decrypted.\n\n\n### Remarks\n\n* It is highly recommended to always turn on the resize option mainly because encryption performance is inversly propotional with the number of pixels an image has. The only time you need to disable resizing is when pixel information is critical but that will result in a much reduced perfomance.\n  \n* Values choosen for each map must be valid see this [section](#valid-inputs) to learn more.\n\n* Make sure when decrypting to enter the exact same values used for encryption, any simple variation or mismatch will result in decryption not being successful.\n\n## Security\n\nOne aspect of measuring the security of any encrypton is called `key space analysis` which is simply the number of keys - permutations - that an attacker has to through in order to find the parameters your are using.\n\nA map like the double humped map has three input parameters at 64 bits length yields it's size to be 192 bits long which constitues a key space of ![2^{192} = 10^{57}](https://render.githubusercontent.com/render/math?math=2%5E%7B192%7D%20%3D%2010%5E%7B57%7D) keys in total which is large enough to resist any kind of brute force attackes. (infact ![10^{57}](https://render.githubusercontent.com/render/math?math=10^57) is larger than the total number of atoms in our galaxy!) \n\nOf course there are other aspects of measuring security for an encryption system such as entropy, key sensitivity analysis, differential attacks ... etc. For a thorough analysis of our Double humped map example, read this [journal](https://www.sciencedirect.com/science/article/pii/S2090123218300195)\n\n\n## Examples\n\n|Original                                       | Encrypted                                                         |\n|:---------------------------------------------:|:------------------------------------------------------------------:| \n|\u003cimg src=\"./app/assets/images/lena.png\" width=\"300px\" \u003e| \u003cimg src=\"./app/assets/images/lena_enc.png\" width=\"300px\"\u003e     |\n|\u003cimg src=\"./app/assets/images/ruby.jpg\" width=\"300px\" \u003e| \u003cimg src=\"./app/assets/images/ruby_enc.jpg\" width=\"300px\"\u003e |\n\n\n## Valid inputs\n\nEach chaotic map has certain valid ranges that it can operate within. For successful encryption, you need to choose values such that the ouptut of the map will be chaotic.\n\n* Logistic map\n  \n  ![\\lambda \\in \\[0,4\\], \\lambda_{chaos} \u003e 3.6](https://render.githubusercontent.com/render/math?math=%5Clambda%20%5Cin%20%5B0%2C4%5D%2C%20%5Clambda_%7Bchaos%7D%20%3E%203.6)\n\n  ![x \\in \\[0,1\\]](https://render.githubusercontent.com/render/math?math=x%20%5Cin%20%5B0%2C1%5D)\n\n* Double humped map\n  \n  ![\\lambda \\in \\[0, \\frac{8}{c^3}\\]](https://render.githubusercontent.com/render/math?math=%5Clambda%20%5Cin%20%5B0%2C%20%5Cfrac%7B8%7D%7Bc%5E3%7D%5D)\n  \n  ![x \\in \\[0, 2c\\]](https://render.githubusercontent.com/render/math?math=x%20%5Cin%20%5B0%2C%202c%5D)\n\n  exact chaotic regions will depend on ![c](https://render.githubusercontent.com/render/math?math=c), as an example for  ![c = 1, \\lambda_{chaos} \u003e 3.2](https://render.githubusercontent.com/render/math?math=c%20%3D%201%2C%20%5Clambda_%7Bchaos%7D%20%3E%203.2).\n\n* For the Henon map there is no way - as far as I have researched - to check wether the initial parameters will diverge to the attractor or infinity, therfore the encryption is stopped anytime the sequence diverges to infinity. \n  \n## Roadmap\n\n* Adding more maps to choose from.\n* Histograms and comaprisons right inside the app.\n* Encryption of formats and files other than images.\n\n\n## Development\n\nIf you would like to develop a new feature or see how the code is running under the hood follow these steps.\n\n### Prerequisites\n* **Node**\n  \n  Install node from the [offical mirror](https://nodejs.org/en/download/) - this comes with `npm` too.\n\n### Installation\n\n* **Fork the project / Download**\n\n* **Install NPM packages** \n  ```sh\n   cd Nova\n   npm install \n  ```\n* **Build project**\n  ```sh\n  npm run build\n  ```\n  or to watch your files \n  ```sh\n  npm run watch\n  ```\n* **Test**\n\n  Test to see that everything is working\n  ```sh\n  npm run test\n  ```\n* **Run**\n  ```sh\n  npm run start\n  ```\n\n## C++ implementation\n\nI have implemented this project in c++ which runs from CLI and perofrms at 3 - 5 times the speed of this implementation in javascript. Check it out in this [github repo](https://github.com/hussamsh/nova-cpp). \n\n\n## License\n\nGNU GENERAL PUBLIC LICENSE Version 2.\n\n [Read more](https://github.com/hussamsh/Nova/blob/hossam-dev/LICENSE)\n\n## Contact\n\nhossamsherifmostafa@gmail.com\n\n\n\n[product-screenshot]: ./app/assets/images/nova-capture.gif\n[params-screenshot]: ./app/assets/images/choose-param.png\n[windows]: ./app/assets/images/microsoft.png\n[macos]: ./app/assets/images/macos.png\n[linux]: ./app/assets/images/linux.png\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhussamsh%2Fnova","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhussamsh%2Fnova","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhussamsh%2Fnova/lists"}