1087 lines
50 KiB
HTML
1087 lines
50 KiB
HTML
<!DOCTYPE html>
|
||
<html class="writer-html5" lang="en" >
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||
<link rel="shortcut icon" href="../img/favicon.ico" />
|
||
<title>RSA - CryptoTools documentation</title>
|
||
<link rel="stylesheet" href="../css/theme.css" />
|
||
<link rel="stylesheet" href="../css/theme_extra.css" />
|
||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/github.min.css" />
|
||
<link href="../assets/_mkdocstrings.css" rel="stylesheet" />
|
||
|
||
<script>
|
||
// Current page data
|
||
var mkdocs_page_name = "RSA";
|
||
var mkdocs_page_input_path = "rsa.md";
|
||
var mkdocs_page_url = null;
|
||
</script>
|
||
|
||
<!--[if lt IE 9]>
|
||
<script src="../js/html5shiv.min.js"></script>
|
||
<![endif]-->
|
||
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js"></script>
|
||
<script>hljs.highlightAll();</script>
|
||
</head>
|
||
|
||
<body class="wy-body-for-nav" role="document">
|
||
|
||
<div class="wy-grid-for-nav">
|
||
<nav data-toggle="wy-nav-shift" class="wy-nav-side stickynav">
|
||
<div class="wy-side-scroll">
|
||
<div class="wy-side-nav-search">
|
||
<a href=".." class="icon icon-home"> CryptoTools documentation
|
||
</a>
|
||
</div>
|
||
|
||
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="../introduction/">Introduction</a>
|
||
</li>
|
||
</ul>
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="../installation/">Installation</a>
|
||
</li>
|
||
</ul>
|
||
<p class="caption"><span class="caption-text">Low-level cryptographic</span></p>
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="../number-theory/">Number theory</a>
|
||
</li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../group-theory/">Group theory</a>
|
||
</li>
|
||
</ul>
|
||
<p class="caption"><span class="caption-text">Public Keys</span></p>
|
||
<ul class="current">
|
||
<li class="toctree-l1 current"><a class="reference internal current" href="#">RSA</a>
|
||
<ul class="current">
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<p class="caption"><span class="caption-text">Examples</span></p>
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="../examples-rsa-keys/">Generating RSA Keys</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</nav>
|
||
|
||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||
<nav class="wy-nav-top" role="navigation" aria-label="Mobile navigation menu">
|
||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||
<a href="..">CryptoTools documentation</a>
|
||
|
||
</nav>
|
||
<div class="wy-nav-content">
|
||
<div class="rst-content"><div role="navigation" aria-label="breadcrumbs navigation">
|
||
<ul class="wy-breadcrumbs">
|
||
<li><a href=".." class="icon icon-home" aria-label="Docs"></a></li>
|
||
<li class="breadcrumb-item">Public Keys</li>
|
||
<li class="breadcrumb-item active">RSA</li>
|
||
<li class="wy-breadcrumbs-aside">
|
||
</li>
|
||
</ul>
|
||
<hr/>
|
||
</div>
|
||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||
<div class="section" itemprop="articleBody">
|
||
|
||
<p>CryptoTools provides several functions for generating a RSA Keys</p>
|
||
|
||
|
||
<div class="doc doc-object doc-module">
|
||
|
||
|
||
|
||
<a id="Cryptotools.Encryptions.RSA"></a>
|
||
<div class="doc doc-contents first">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="doc doc-children">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="doc doc-object doc-class">
|
||
|
||
|
||
|
||
<h2 id="Cryptotools.Encryptions.RSA.RSA" class="doc doc-heading">
|
||
<code>RSA</code>
|
||
|
||
|
||
</h2>
|
||
|
||
|
||
<div class="doc doc-contents ">
|
||
|
||
|
||
<p>This class generate public key based on RSA algorithm</p>
|
||
|
||
|
||
<table class="field-list">
|
||
<colgroup>
|
||
<col class="field-name" />
|
||
<col class="field-body" />
|
||
</colgroup>
|
||
<tbody valign="top">
|
||
<tr class="field">
|
||
<th class="field-name">Attributes:</th>
|
||
<td class="field-body">
|
||
<ul class="first simple">
|
||
<li>
|
||
<b><code>p</code></b>
|
||
–
|
||
<div class="doc-md-description">
|
||
<p>it's the prime number for generating the modulus</p>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<b><code>q</code></b>
|
||
–
|
||
<div class="doc-md-description">
|
||
<p>it's the second prime number for the modulus</p>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<b><code>public</code></b>
|
||
–
|
||
<div class="doc-md-description">
|
||
<p>Object of the RSAKey which is the public key</p>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<b><code>private</code></b>
|
||
–
|
||
<div class="doc-md-description">
|
||
<p>Object of the RSAKey for the private key</p>
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<details class="quote">
|
||
<summary>Source code in <code>Cryptotools/Encryptions/RSA.py</code></summary>
|
||
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 45</span>
|
||
<span class="normal"> 46</span>
|
||
<span class="normal"> 47</span>
|
||
<span class="normal"> 48</span>
|
||
<span class="normal"> 49</span>
|
||
<span class="normal"> 50</span>
|
||
<span class="normal"> 51</span>
|
||
<span class="normal"> 52</span>
|
||
<span class="normal"> 53</span>
|
||
<span class="normal"> 54</span>
|
||
<span class="normal"> 55</span>
|
||
<span class="normal"> 56</span>
|
||
<span class="normal"> 57</span>
|
||
<span class="normal"> 58</span>
|
||
<span class="normal"> 59</span>
|
||
<span class="normal"> 60</span>
|
||
<span class="normal"> 61</span>
|
||
<span class="normal"> 62</span>
|
||
<span class="normal"> 63</span>
|
||
<span class="normal"> 64</span>
|
||
<span class="normal"> 65</span>
|
||
<span class="normal"> 66</span>
|
||
<span class="normal"> 67</span>
|
||
<span class="normal"> 68</span>
|
||
<span class="normal"> 69</span>
|
||
<span class="normal"> 70</span>
|
||
<span class="normal"> 71</span>
|
||
<span class="normal"> 72</span>
|
||
<span class="normal"> 73</span>
|
||
<span class="normal"> 74</span>
|
||
<span class="normal"> 75</span>
|
||
<span class="normal"> 76</span>
|
||
<span class="normal"> 77</span>
|
||
<span class="normal"> 78</span>
|
||
<span class="normal"> 79</span>
|
||
<span class="normal"> 80</span>
|
||
<span class="normal"> 81</span>
|
||
<span class="normal"> 82</span>
|
||
<span class="normal"> 83</span>
|
||
<span class="normal"> 84</span>
|
||
<span class="normal"> 85</span>
|
||
<span class="normal"> 86</span>
|
||
<span class="normal"> 87</span>
|
||
<span class="normal"> 88</span>
|
||
<span class="normal"> 89</span>
|
||
<span class="normal"> 90</span>
|
||
<span class="normal"> 91</span>
|
||
<span class="normal"> 92</span>
|
||
<span class="normal"> 93</span>
|
||
<span class="normal"> 94</span>
|
||
<span class="normal"> 95</span>
|
||
<span class="normal"> 96</span>
|
||
<span class="normal"> 97</span>
|
||
<span class="normal"> 98</span>
|
||
<span class="normal"> 99</span>
|
||
<span class="normal">100</span>
|
||
<span class="normal">101</span>
|
||
<span class="normal">102</span>
|
||
<span class="normal">103</span>
|
||
<span class="normal">104</span>
|
||
<span class="normal">105</span>
|
||
<span class="normal">106</span>
|
||
<span class="normal">107</span>
|
||
<span class="normal">108</span>
|
||
<span class="normal">109</span>
|
||
<span class="normal">110</span>
|
||
<span class="normal">111</span>
|
||
<span class="normal">112</span>
|
||
<span class="normal">113</span>
|
||
<span class="normal">114</span>
|
||
<span class="normal">115</span>
|
||
<span class="normal">116</span>
|
||
<span class="normal">117</span>
|
||
<span class="normal">118</span>
|
||
<span class="normal">119</span>
|
||
<span class="normal">120</span>
|
||
<span class="normal">121</span>
|
||
<span class="normal">122</span>
|
||
<span class="normal">123</span>
|
||
<span class="normal">124</span>
|
||
<span class="normal">125</span>
|
||
<span class="normal">126</span>
|
||
<span class="normal">127</span>
|
||
<span class="normal">128</span>
|
||
<span class="normal">129</span>
|
||
<span class="normal">130</span>
|
||
<span class="normal">131</span>
|
||
<span class="normal">132</span>
|
||
<span class="normal">133</span>
|
||
<span class="normal">134</span>
|
||
<span class="normal">135</span>
|
||
<span class="normal">136</span>
|
||
<span class="normal">137</span>
|
||
<span class="normal">138</span>
|
||
<span class="normal">139</span>
|
||
<span class="normal">140</span>
|
||
<span class="normal">141</span>
|
||
<span class="normal">142</span>
|
||
<span class="normal">143</span>
|
||
<span class="normal">144</span>
|
||
<span class="normal">145</span>
|
||
<span class="normal">146</span>
|
||
<span class="normal">147</span>
|
||
<span class="normal">148</span>
|
||
<span class="normal">149</span>
|
||
<span class="normal">150</span>
|
||
<span class="normal">151</span>
|
||
<span class="normal">152</span>
|
||
<span class="normal">153</span>
|
||
<span class="normal">154</span>
|
||
<span class="normal">155</span>
|
||
<span class="normal">156</span>
|
||
<span class="normal">157</span>
|
||
<span class="normal">158</span>
|
||
<span class="normal">159</span>
|
||
<span class="normal">160</span>
|
||
<span class="normal">161</span>
|
||
<span class="normal">162</span>
|
||
<span class="normal">163</span>
|
||
<span class="normal">164</span>
|
||
<span class="normal">165</span>
|
||
<span class="normal">166</span>
|
||
<span class="normal">167</span>
|
||
<span class="normal">168</span>
|
||
<span class="normal">169</span>
|
||
<span class="normal">170</span>
|
||
<span class="normal">171</span>
|
||
<span class="normal">172</span>
|
||
<span class="normal">173</span>
|
||
<span class="normal">174</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">RSA</span><span class="p">:</span>
|
||
<span class="w"> </span><span class="sd">"""</span>
|
||
<span class="sd"> This class generate public key based on RSA algorithm</span>
|
||
|
||
<span class="sd"> Attributes:</span>
|
||
<span class="sd"> p: it's the prime number for generating the modulus</span>
|
||
<span class="sd"> q: it's the second prime number for the modulus</span>
|
||
<span class="sd"> public: Object of the RSAKey which is the public key</span>
|
||
<span class="sd"> private: Object of the RSAKey for the private key</span>
|
||
<span class="sd"> """</span>
|
||
|
||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
<span class="w"> </span><span class="sd">"""</span>
|
||
<span class="sd"> Build a RSA Key</span>
|
||
<span class="sd"> """</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">_p</span> <span class="o">=</span> <span class="kc">None</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">_q</span> <span class="o">=</span> <span class="kc">None</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">_public</span> <span class="o">=</span> <span class="kc">None</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">_private</span> <span class="o">=</span> <span class="kc">None</span>
|
||
|
||
<span class="k">def</span> <span class="nf">generateKeys</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mi">512</span><span class="p">):</span>
|
||
<span class="w"> </span><span class="sd">"""</span>
|
||
<span class="sd"> This function generate both public and private keys</span>
|
||
<span class="sd"> Args:</span>
|
||
<span class="sd"> size: It's the size of the key and must be multiple of 64</span>
|
||
<span class="sd"> """</span>
|
||
<span class="c1"># p and q must be coprime</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">_p</span> <span class="o">=</span> <span class="n">getPrimeNumber</span><span class="p">(</span><span class="n">size</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">_q</span> <span class="o">=</span> <span class="n">getPrimeNumber</span><span class="p">(</span><span class="n">size</span><span class="p">)</span>
|
||
|
||
<span class="c1"># compute n = pq</span>
|
||
<span class="n">n</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_p</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">_q</span>
|
||
|
||
<span class="n">phin</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_p</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_q</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
|
||
|
||
<span class="c1"># e must be coprime with phi(n)</span>
|
||
<span class="c1"># According to the FIPS 186-5, the public key exponent must be odd</span>
|
||
<span class="c1"># and the minimum size is 65536 (Cf. Section 5.4 PKCS #1)</span>
|
||
<span class="c1"># https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf</span>
|
||
<span class="n">e</span> <span class="o">=</span> <span class="mi">65535</span> <span class="c1"># Works</span>
|
||
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="n">phin</span> <span class="o">-</span> <span class="mi">1</span><span class="p">):</span>
|
||
<span class="k">if</span> <span class="n">gcd</span><span class="p">(</span><span class="n">phin</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
||
<span class="k">break</span>
|
||
<span class="n">e</span> <span class="o">+=</span> <span class="mi">1</span>
|
||
<span class="c1"># print(gcd(phin, e))</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">_public</span> <span class="o">=</span> <span class="n">RSAKey</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">n</span><span class="p">,</span> <span class="n">getsizeof</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
||
|
||
<span class="c1"># d is the reverse modulo of phi(n)</span>
|
||
<span class="c1"># d = self._inverseModular(e, phin)</span>
|
||
<span class="n">d</span> <span class="o">=</span> <span class="nb">pow</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">phin</span><span class="p">)</span> <span class="c1"># Works in python 3.8</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">_private</span> <span class="o">=</span> <span class="n">RSAKey</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="n">n</span><span class="p">,</span> <span class="n">getsizeof</span><span class="p">(</span><span class="n">d</span><span class="p">))</span>
|
||
|
||
<span class="nd">@property</span>
|
||
<span class="k">def</span> <span class="nf">e</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_public</span><span class="o">.</span><span class="n">key</span>
|
||
|
||
<span class="nd">@property</span>
|
||
<span class="k">def</span> <span class="nf">d</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_private</span><span class="o">.</span><span class="n">key</span>
|
||
|
||
<span class="nd">@property</span>
|
||
<span class="k">def</span> <span class="nf">n</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_public</span><span class="o">.</span><span class="n">modulus</span>
|
||
|
||
<span class="nd">@property</span>
|
||
<span class="k">def</span> <span class="nf">p</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_p</span>
|
||
|
||
<span class="nd">@property</span>
|
||
<span class="k">def</span> <span class="nf">q</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_q</span>
|
||
|
||
<span class="k">def</span> <span class="nf">encrypt</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span> <span class="o">-></span> <span class="nb">list</span><span class="p">:</span>
|
||
<span class="w"> </span><span class="sd">"""</span>
|
||
<span class="sd"> This function return a list of data encrypted with the public key</span>
|
||
|
||
<span class="sd"> Args:</span>
|
||
<span class="sd"> data (str): it's the plaintext which need to be encrypted</span>
|
||
|
||
<span class="sd"> Returns:</span>
|
||
<span class="sd"> return a list of the data encrypted, each entries contains the value encoded</span>
|
||
<span class="sd"> """</span>
|
||
<span class="n">dataEncoded</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_str2bin</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
|
||
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span>
|
||
<span class="nb">pow</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_public</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_public</span><span class="o">.</span><span class="n">modulus</span><span class="p">)</span>
|
||
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">dataEncoded</span>
|
||
<span class="p">)</span>
|
||
|
||
<span class="k">def</span> <span class="nf">decrypt</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span> <span class="o">-></span> <span class="nb">list</span><span class="p">:</span>
|
||
<span class="w"> </span><span class="sd">"""</span>
|
||
<span class="sd"> This function return a list decrypted with the private key</span>
|
||
|
||
<span class="sd"> Args:</span>
|
||
<span class="sd"> data (str): It's the encrypted data which need to be decrypted</span>
|
||
|
||
<span class="sd"> Returns:</span>
|
||
<span class="sd"> Return the list of data uncrypted into plaintext</span>
|
||
<span class="sd"> """</span>
|
||
<span class="n">decrypted</span> <span class="o">=</span> <span class="nb">list</span><span class="p">()</span>
|
||
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
|
||
<span class="n">d</span> <span class="o">=</span> <span class="nb">pow</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_private</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_private</span><span class="o">.</span><span class="n">modulus</span><span class="p">)</span>
|
||
<span class="n">decrypted</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">chr</span><span class="p">(</span><span class="n">d</span><span class="p">))</span>
|
||
<span class="k">return</span> <span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">decrypted</span><span class="p">)</span>
|
||
|
||
<span class="k">def</span> <span class="nf">_str2bin</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span> <span class="o">-></span> <span class="nb">list</span><span class="p">:</span>
|
||
<span class="w"> </span><span class="sd">"""</span>
|
||
<span class="sd"> This function convert a string into the unicode value</span>
|
||
|
||
<span class="sd"> Args:</span>
|
||
<span class="sd"> data: the string which need to be converted</span>
|
||
|
||
<span class="sd"> Returns:</span>
|
||
<span class="sd"> Return a list of unicode values of data</span>
|
||
<span class="sd"> """</span>
|
||
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">ord</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">data</span><span class="p">)</span>
|
||
|
||
<span class="k">def</span> <span class="nf">_inverseModular</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">n</span><span class="p">):</span>
|
||
<span class="w"> </span><span class="sd">"""</span>
|
||
<span class="sd"> This function compute the modular inverse for finding d, the decryption key</span>
|
||
|
||
<span class="sd"> Args:</span>
|
||
<span class="sd"> a (Integer): the base of the exponent</span>
|
||
<span class="sd"> n (Integer): the modulus</span>
|
||
<span class="sd"> """</span>
|
||
<span class="k">for</span> <span class="n">b</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">n</span><span class="p">):</span>
|
||
<span class="c1">#if pow(a, b, n) == 1:</span>
|
||
<span class="k">if</span> <span class="p">(</span><span class="n">a</span> <span class="o">*</span> <span class="n">b</span><span class="p">)</span> <span class="o">%</span> <span class="n">n</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
||
<span class="n">inv</span> <span class="o">=</span> <span class="n">b</span>
|
||
<span class="k">break</span>
|
||
<span class="k">return</span> <span class="n">inv</span>
|
||
</code></pre></div></td></tr></table></div>
|
||
</details>
|
||
|
||
|
||
|
||
<div class="doc doc-children">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="doc doc-object doc-function">
|
||
|
||
|
||
<h3 id="Cryptotools.Encryptions.RSA.RSA.__init__" class="doc doc-heading">
|
||
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">()</span></code>
|
||
|
||
</h3>
|
||
|
||
|
||
<div class="doc doc-contents ">
|
||
|
||
<p>Build a RSA Key</p>
|
||
|
||
|
||
<details class="quote">
|
||
<summary>Source code in <code>Cryptotools/Encryptions/RSA.py</code></summary>
|
||
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">56</span>
|
||
<span class="normal">57</span>
|
||
<span class="normal">58</span>
|
||
<span class="normal">59</span>
|
||
<span class="normal">60</span>
|
||
<span class="normal">61</span>
|
||
<span class="normal">62</span>
|
||
<span class="normal">63</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
<span class="w"> </span><span class="sd">"""</span>
|
||
<span class="sd"> Build a RSA Key</span>
|
||
<span class="sd"> """</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">_p</span> <span class="o">=</span> <span class="kc">None</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">_q</span> <span class="o">=</span> <span class="kc">None</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">_public</span> <span class="o">=</span> <span class="kc">None</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">_private</span> <span class="o">=</span> <span class="kc">None</span>
|
||
</code></pre></div></td></tr></table></div>
|
||
</details>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="doc doc-object doc-function">
|
||
|
||
|
||
<h3 id="Cryptotools.Encryptions.RSA.RSA.decrypt" class="doc doc-heading">
|
||
<code class="highlight language-python"><span class="n">decrypt</span><span class="p">(</span><span class="n">data</span><span class="p">)</span></code>
|
||
|
||
</h3>
|
||
|
||
|
||
<div class="doc doc-contents ">
|
||
|
||
<p>This function return a list decrypted with the private key</p>
|
||
|
||
|
||
<table class="field-list">
|
||
<colgroup>
|
||
<col class="field-name" />
|
||
<col class="field-body" />
|
||
</colgroup>
|
||
<tbody valign="top">
|
||
<tr class="field">
|
||
<th class="field-name">Parameters:</th>
|
||
<td class="field-body">
|
||
<ul class="first simple">
|
||
<li>
|
||
<b><code>data</code></b>
|
||
(<code><span title="str">str</span></code>)
|
||
–
|
||
<div class="doc-md-description">
|
||
<p>It's the encrypted data which need to be decrypted</p>
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<table class="field-list">
|
||
<colgroup>
|
||
<col class="field-name" />
|
||
<col class="field-body" />
|
||
</colgroup>
|
||
<tbody valign="top">
|
||
<tr class="field">
|
||
<th class="field-name">Returns:</th>
|
||
<td class="field-body">
|
||
<ul class="first simple">
|
||
<li>
|
||
<code><span title="list">list</span></code>
|
||
–
|
||
<div class="doc-md-description">
|
||
<p>Return the list of data uncrypted into plaintext</p>
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<details class="quote">
|
||
<summary>Source code in <code>Cryptotools/Encryptions/RSA.py</code></summary>
|
||
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">133</span>
|
||
<span class="normal">134</span>
|
||
<span class="normal">135</span>
|
||
<span class="normal">136</span>
|
||
<span class="normal">137</span>
|
||
<span class="normal">138</span>
|
||
<span class="normal">139</span>
|
||
<span class="normal">140</span>
|
||
<span class="normal">141</span>
|
||
<span class="normal">142</span>
|
||
<span class="normal">143</span>
|
||
<span class="normal">144</span>
|
||
<span class="normal">145</span>
|
||
<span class="normal">146</span>
|
||
<span class="normal">147</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">decrypt</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span> <span class="o">-></span> <span class="nb">list</span><span class="p">:</span>
|
||
<span class="w"> </span><span class="sd">"""</span>
|
||
<span class="sd"> This function return a list decrypted with the private key</span>
|
||
|
||
<span class="sd"> Args:</span>
|
||
<span class="sd"> data (str): It's the encrypted data which need to be decrypted</span>
|
||
|
||
<span class="sd"> Returns:</span>
|
||
<span class="sd"> Return the list of data uncrypted into plaintext</span>
|
||
<span class="sd"> """</span>
|
||
<span class="n">decrypted</span> <span class="o">=</span> <span class="nb">list</span><span class="p">()</span>
|
||
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
|
||
<span class="n">d</span> <span class="o">=</span> <span class="nb">pow</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_private</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_private</span><span class="o">.</span><span class="n">modulus</span><span class="p">)</span>
|
||
<span class="n">decrypted</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">chr</span><span class="p">(</span><span class="n">d</span><span class="p">))</span>
|
||
<span class="k">return</span> <span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">decrypted</span><span class="p">)</span>
|
||
</code></pre></div></td></tr></table></div>
|
||
</details>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="doc doc-object doc-function">
|
||
|
||
|
||
<h3 id="Cryptotools.Encryptions.RSA.RSA.encrypt" class="doc doc-heading">
|
||
<code class="highlight language-python"><span class="n">encrypt</span><span class="p">(</span><span class="n">data</span><span class="p">)</span></code>
|
||
|
||
</h3>
|
||
|
||
|
||
<div class="doc doc-contents ">
|
||
|
||
<p>This function return a list of data encrypted with the public key</p>
|
||
|
||
|
||
<table class="field-list">
|
||
<colgroup>
|
||
<col class="field-name" />
|
||
<col class="field-body" />
|
||
</colgroup>
|
||
<tbody valign="top">
|
||
<tr class="field">
|
||
<th class="field-name">Parameters:</th>
|
||
<td class="field-body">
|
||
<ul class="first simple">
|
||
<li>
|
||
<b><code>data</code></b>
|
||
(<code><span title="str">str</span></code>)
|
||
–
|
||
<div class="doc-md-description">
|
||
<p>it's the plaintext which need to be encrypted</p>
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<table class="field-list">
|
||
<colgroup>
|
||
<col class="field-name" />
|
||
<col class="field-body" />
|
||
</colgroup>
|
||
<tbody valign="top">
|
||
<tr class="field">
|
||
<th class="field-name">Returns:</th>
|
||
<td class="field-body">
|
||
<ul class="first simple">
|
||
<li>
|
||
<code><span title="list">list</span></code>
|
||
–
|
||
<div class="doc-md-description">
|
||
<p>return a list of the data encrypted, each entries contains the value encoded</p>
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<details class="quote">
|
||
<summary>Source code in <code>Cryptotools/Encryptions/RSA.py</code></summary>
|
||
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">117</span>
|
||
<span class="normal">118</span>
|
||
<span class="normal">119</span>
|
||
<span class="normal">120</span>
|
||
<span class="normal">121</span>
|
||
<span class="normal">122</span>
|
||
<span class="normal">123</span>
|
||
<span class="normal">124</span>
|
||
<span class="normal">125</span>
|
||
<span class="normal">126</span>
|
||
<span class="normal">127</span>
|
||
<span class="normal">128</span>
|
||
<span class="normal">129</span>
|
||
<span class="normal">130</span>
|
||
<span class="normal">131</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">encrypt</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span> <span class="o">-></span> <span class="nb">list</span><span class="p">:</span>
|
||
<span class="w"> </span><span class="sd">"""</span>
|
||
<span class="sd"> This function return a list of data encrypted with the public key</span>
|
||
|
||
<span class="sd"> Args:</span>
|
||
<span class="sd"> data (str): it's the plaintext which need to be encrypted</span>
|
||
|
||
<span class="sd"> Returns:</span>
|
||
<span class="sd"> return a list of the data encrypted, each entries contains the value encoded</span>
|
||
<span class="sd"> """</span>
|
||
<span class="n">dataEncoded</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_str2bin</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
|
||
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span>
|
||
<span class="nb">pow</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_public</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_public</span><span class="o">.</span><span class="n">modulus</span><span class="p">)</span>
|
||
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">dataEncoded</span>
|
||
<span class="p">)</span>
|
||
</code></pre></div></td></tr></table></div>
|
||
</details>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="doc doc-object doc-function">
|
||
|
||
|
||
<h3 id="Cryptotools.Encryptions.RSA.RSA.generateKeys" class="doc doc-heading">
|
||
<code class="highlight language-python"><span class="n">generateKeys</span><span class="p">(</span><span class="n">size</span><span class="o">=</span><span class="mi">512</span><span class="p">)</span></code>
|
||
|
||
</h3>
|
||
|
||
|
||
<div class="doc doc-contents ">
|
||
|
||
<p>This function generate both public and private keys
|
||
Args:
|
||
size: It's the size of the key and must be multiple of 64</p>
|
||
|
||
|
||
<details class="quote">
|
||
<summary>Source code in <code>Cryptotools/Encryptions/RSA.py</code></summary>
|
||
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">65</span>
|
||
<span class="normal">66</span>
|
||
<span class="normal">67</span>
|
||
<span class="normal">68</span>
|
||
<span class="normal">69</span>
|
||
<span class="normal">70</span>
|
||
<span class="normal">71</span>
|
||
<span class="normal">72</span>
|
||
<span class="normal">73</span>
|
||
<span class="normal">74</span>
|
||
<span class="normal">75</span>
|
||
<span class="normal">76</span>
|
||
<span class="normal">77</span>
|
||
<span class="normal">78</span>
|
||
<span class="normal">79</span>
|
||
<span class="normal">80</span>
|
||
<span class="normal">81</span>
|
||
<span class="normal">82</span>
|
||
<span class="normal">83</span>
|
||
<span class="normal">84</span>
|
||
<span class="normal">85</span>
|
||
<span class="normal">86</span>
|
||
<span class="normal">87</span>
|
||
<span class="normal">88</span>
|
||
<span class="normal">89</span>
|
||
<span class="normal">90</span>
|
||
<span class="normal">91</span>
|
||
<span class="normal">92</span>
|
||
<span class="normal">93</span>
|
||
<span class="normal">94</span>
|
||
<span class="normal">95</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">generateKeys</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mi">512</span><span class="p">):</span>
|
||
<span class="w"> </span><span class="sd">"""</span>
|
||
<span class="sd"> This function generate both public and private keys</span>
|
||
<span class="sd"> Args:</span>
|
||
<span class="sd"> size: It's the size of the key and must be multiple of 64</span>
|
||
<span class="sd"> """</span>
|
||
<span class="c1"># p and q must be coprime</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">_p</span> <span class="o">=</span> <span class="n">getPrimeNumber</span><span class="p">(</span><span class="n">size</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">_q</span> <span class="o">=</span> <span class="n">getPrimeNumber</span><span class="p">(</span><span class="n">size</span><span class="p">)</span>
|
||
|
||
<span class="c1"># compute n = pq</span>
|
||
<span class="n">n</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_p</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">_q</span>
|
||
|
||
<span class="n">phin</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_p</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_q</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
|
||
|
||
<span class="c1"># e must be coprime with phi(n)</span>
|
||
<span class="c1"># According to the FIPS 186-5, the public key exponent must be odd</span>
|
||
<span class="c1"># and the minimum size is 65536 (Cf. Section 5.4 PKCS #1)</span>
|
||
<span class="c1"># https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf</span>
|
||
<span class="n">e</span> <span class="o">=</span> <span class="mi">65535</span> <span class="c1"># Works</span>
|
||
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="n">phin</span> <span class="o">-</span> <span class="mi">1</span><span class="p">):</span>
|
||
<span class="k">if</span> <span class="n">gcd</span><span class="p">(</span><span class="n">phin</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
||
<span class="k">break</span>
|
||
<span class="n">e</span> <span class="o">+=</span> <span class="mi">1</span>
|
||
<span class="c1"># print(gcd(phin, e))</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">_public</span> <span class="o">=</span> <span class="n">RSAKey</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">n</span><span class="p">,</span> <span class="n">getsizeof</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
||
|
||
<span class="c1"># d is the reverse modulo of phi(n)</span>
|
||
<span class="c1"># d = self._inverseModular(e, phin)</span>
|
||
<span class="n">d</span> <span class="o">=</span> <span class="nb">pow</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">phin</span><span class="p">)</span> <span class="c1"># Works in python 3.8</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">_private</span> <span class="o">=</span> <span class="n">RSAKey</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="n">n</span><span class="p">,</span> <span class="n">getsizeof</span><span class="p">(</span><span class="n">d</span><span class="p">))</span>
|
||
</code></pre></div></td></tr></table></div>
|
||
</details>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="doc doc-object doc-class">
|
||
|
||
|
||
|
||
<h2 id="Cryptotools.Encryptions.RSA.RSAKey" class="doc doc-heading">
|
||
<code>RSAKey</code>
|
||
|
||
|
||
</h2>
|
||
|
||
|
||
<div class="doc doc-contents ">
|
||
|
||
|
||
<p>This class store the RSA key with the modulus associated
|
||
The key is a tuple of the key and the modulus n</p>
|
||
|
||
|
||
<table class="field-list">
|
||
<colgroup>
|
||
<col class="field-name" />
|
||
<col class="field-body" />
|
||
</colgroup>
|
||
<tbody valign="top">
|
||
<tr class="field">
|
||
<th class="field-name">Attributes:</th>
|
||
<td class="field-body">
|
||
<ul class="first simple">
|
||
<li>
|
||
<b><code>key</code></b>
|
||
–
|
||
<div class="doc-md-description">
|
||
<p>It's the exponent key, can be public or private</p>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<b><code>modulus</code></b>
|
||
–
|
||
<div class="doc-md-description">
|
||
<p>It's the public modulus</p>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<b><code>length</code></b>
|
||
–
|
||
<div class="doc-md-description">
|
||
<p>It's the key length</p>
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<details class="quote">
|
||
<summary>Source code in <code>Cryptotools/Encryptions/RSA.py</code></summary>
|
||
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 9</span>
|
||
<span class="normal">10</span>
|
||
<span class="normal">11</span>
|
||
<span class="normal">12</span>
|
||
<span class="normal">13</span>
|
||
<span class="normal">14</span>
|
||
<span class="normal">15</span>
|
||
<span class="normal">16</span>
|
||
<span class="normal">17</span>
|
||
<span class="normal">18</span>
|
||
<span class="normal">19</span>
|
||
<span class="normal">20</span>
|
||
<span class="normal">21</span>
|
||
<span class="normal">22</span>
|
||
<span class="normal">23</span>
|
||
<span class="normal">24</span>
|
||
<span class="normal">25</span>
|
||
<span class="normal">26</span>
|
||
<span class="normal">27</span>
|
||
<span class="normal">28</span>
|
||
<span class="normal">29</span>
|
||
<span class="normal">30</span>
|
||
<span class="normal">31</span>
|
||
<span class="normal">32</span>
|
||
<span class="normal">33</span>
|
||
<span class="normal">34</span>
|
||
<span class="normal">35</span>
|
||
<span class="normal">36</span>
|
||
<span class="normal">37</span>
|
||
<span class="normal">38</span>
|
||
<span class="normal">39</span>
|
||
<span class="normal">40</span>
|
||
<span class="normal">41</span>
|
||
<span class="normal">42</span>
|
||
<span class="normal">43</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">RSAKey</span><span class="p">:</span>
|
||
<span class="w"> </span><span class="sd">"""</span>
|
||
<span class="sd"> This class store the RSA key with the modulus associated</span>
|
||
<span class="sd"> The key is a tuple of the key and the modulus n</span>
|
||
|
||
<span class="sd"> Attributes:</span>
|
||
<span class="sd"> key: It's the exponent key, can be public or private</span>
|
||
<span class="sd"> modulus: It's the public modulus</span>
|
||
<span class="sd"> length: It's the key length</span>
|
||
<span class="sd"> """</span>
|
||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">modulus</span><span class="p">,</span> <span class="n">length</span><span class="p">):</span>
|
||
<span class="w"> </span><span class="sd">"""</span>
|
||
<span class="sd"> Contain the RSA Key. An object of RSAKey can be a public key or a private key</span>
|
||
|
||
<span class="sd"> Args:</span>
|
||
<span class="sd"> key (Integer): it's the exponent of the key</span>
|
||
<span class="sd"> modulus (Integer): it's the public modulus of the key</span>
|
||
<span class="sd"> length (Integer): length of the key</span>
|
||
<span class="sd"> """</span>
|
||
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">_key</span> <span class="o">=</span> <span class="n">key</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">_modulus</span> <span class="o">=</span> <span class="n">modulus</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">_length</span> <span class="o">=</span> <span class="n">length</span>
|
||
|
||
<span class="nd">@property</span>
|
||
<span class="k">def</span> <span class="nf">key</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_key</span>
|
||
|
||
<span class="nd">@property</span>
|
||
<span class="k">def</span> <span class="nf">modulus</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_modulus</span>
|
||
|
||
<span class="nd">@property</span>
|
||
<span class="k">def</span> <span class="nf">length</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">length</span>
|
||
</code></pre></div></td></tr></table></div>
|
||
</details>
|
||
|
||
|
||
|
||
<div class="doc doc-children">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="doc doc-object doc-function">
|
||
|
||
|
||
<h3 id="Cryptotools.Encryptions.RSA.RSAKey.__init__" class="doc doc-heading">
|
||
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">modulus</span><span class="p">,</span> <span class="n">length</span><span class="p">)</span></code>
|
||
|
||
</h3>
|
||
|
||
|
||
<div class="doc doc-contents ">
|
||
|
||
<p>Contain the RSA Key. An object of RSAKey can be a public key or a private key</p>
|
||
|
||
|
||
<table class="field-list">
|
||
<colgroup>
|
||
<col class="field-name" />
|
||
<col class="field-body" />
|
||
</colgroup>
|
||
<tbody valign="top">
|
||
<tr class="field">
|
||
<th class="field-name">Parameters:</th>
|
||
<td class="field-body">
|
||
<ul class="first simple">
|
||
<li>
|
||
<b><code>key</code></b>
|
||
(<code><span title="Integer">Integer</span></code>)
|
||
–
|
||
<div class="doc-md-description">
|
||
<p>it's the exponent of the key</p>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<b><code>modulus</code></b>
|
||
(<code><span title="Integer">Integer</span></code>)
|
||
–
|
||
<div class="doc-md-description">
|
||
<p>it's the public modulus of the key</p>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<b><code>length</code></b>
|
||
(<code><span title="Integer">Integer</span></code>)
|
||
–
|
||
<div class="doc-md-description">
|
||
<p>length of the key</p>
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<details class="quote">
|
||
<summary>Source code in <code>Cryptotools/Encryptions/RSA.py</code></summary>
|
||
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">19</span>
|
||
<span class="normal">20</span>
|
||
<span class="normal">21</span>
|
||
<span class="normal">22</span>
|
||
<span class="normal">23</span>
|
||
<span class="normal">24</span>
|
||
<span class="normal">25</span>
|
||
<span class="normal">26</span>
|
||
<span class="normal">27</span>
|
||
<span class="normal">28</span>
|
||
<span class="normal">29</span>
|
||
<span class="normal">30</span>
|
||
<span class="normal">31</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">modulus</span><span class="p">,</span> <span class="n">length</span><span class="p">):</span>
|
||
<span class="w"> </span><span class="sd">"""</span>
|
||
<span class="sd"> Contain the RSA Key. An object of RSAKey can be a public key or a private key</span>
|
||
|
||
<span class="sd"> Args:</span>
|
||
<span class="sd"> key (Integer): it's the exponent of the key</span>
|
||
<span class="sd"> modulus (Integer): it's the public modulus of the key</span>
|
||
<span class="sd"> length (Integer): length of the key</span>
|
||
<span class="sd"> """</span>
|
||
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">_key</span> <span class="o">=</span> <span class="n">key</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">_modulus</span> <span class="o">=</span> <span class="n">modulus</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">_length</span> <span class="o">=</span> <span class="n">length</span>
|
||
</code></pre></div></td></tr></table></div>
|
||
</details>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
</div><footer>
|
||
<div class="rst-footer-buttons" role="navigation" aria-label="Footer Navigation">
|
||
<a href="../group-theory/" class="btn btn-neutral float-left" title="Group theory"><span class="icon icon-circle-arrow-left"></span> Previous</a>
|
||
<a href="../examples-rsa-keys/" class="btn btn-neutral float-right" title="Generating RSA Keys">Next <span class="icon icon-circle-arrow-right"></span></a>
|
||
</div>
|
||
|
||
<hr/>
|
||
|
||
<div role="contentinfo">
|
||
<!-- Copyright etc -->
|
||
</div>
|
||
|
||
Built with <a href="https://www.mkdocs.org/">MkDocs</a> using a <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||
</footer>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
</section>
|
||
|
||
</div>
|
||
|
||
<div class="rst-versions" role="note" aria-label="Versions">
|
||
<span class="rst-current-version" data-toggle="rst-current-version">
|
||
|
||
|
||
<span><a href="../group-theory/" style="color: #fcfcfc">« Previous</a></span>
|
||
|
||
|
||
<span><a href="../examples-rsa-keys/" style="color: #fcfcfc">Next »</a></span>
|
||
|
||
</span>
|
||
</div>
|
||
<script src="../js/jquery-3.6.0.min.js"></script>
|
||
<script>var base_url = "..";</script>
|
||
<script src="../js/theme_extra.js"></script>
|
||
<script src="../js/theme.js"></script>
|
||
<script>
|
||
jQuery(function () {
|
||
SphinxRtdTheme.Navigation.enable(true);
|
||
});
|
||
</script>
|
||
|
||
</body>
|
||
</html>
|