summaryrefslogtreecommitdiff
path: root/old/api/2.6/Crypto.PublicKey.DSA-module.html
diff options
context:
space:
mode:
Diffstat (limited to 'old/api/2.6/Crypto.PublicKey.DSA-module.html')
-rw-r--r--old/api/2.6/Crypto.PublicKey.DSA-module.html333
1 files changed, 333 insertions, 0 deletions
diff --git a/old/api/2.6/Crypto.PublicKey.DSA-module.html b/old/api/2.6/Crypto.PublicKey.DSA-module.html
new file mode 100644
index 0000000..b78756c
--- /dev/null
+++ b/old/api/2.6/Crypto.PublicKey.DSA-module.html
@@ -0,0 +1,333 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>Crypto.PublicKey.DSA</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="Crypto-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a href="http://www.pycrypto.org/">PyCrypto.org</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="Crypto-module.html">Package&nbsp;Crypto</a> ::
+ <a href="Crypto.PublicKey-module.html">Package&nbsp;PublicKey</a> ::
+ Module&nbsp;DSA
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="Crypto.PublicKey.DSA-module.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== MODULE DESCRIPTION ==================== -->
+<h1 class="epydoc">Module DSA</h1><p class="nomargin-top"></p>
+<p>DSA public-key signature algorithm.</p>
+<p><a class="rst-reference external" href="http://en.wikipedia.org/wiki/Digital_Signature_Algorithm" target="_top">DSA</a> is a widespread public-key signature algorithm. Its security is
+based on the discrete logarithm problem (<a class="rst-reference external" href="http://www.cosic.esat.kuleuven.be/publications/talk-78.pdf" target="_top">DLP</a>). Given a cyclic
+group, a generator <em>g</em>, and an element <em>h</em>, it is hard
+to find an integer <em>x</em> such that <em>g^x = h</em>. The problem is believed
+to be difficult, and it has been proved such (and therefore secure) for
+more than 30 years.</p>
+<p>The group is actually a sub-group over the integers modulo <em>p</em>, with <em>p</em> prime.
+The sub-group order is <em>q</em>, which is prime too; it always holds that <em>(p-1)</em> is a multiple of <em>q</em>.
+The cryptographic strength is linked to the magnitude of <em>p</em> and <em>q</em>.
+The signer holds a value <em>x</em> (<em>0&lt;x&lt;q-1</em>) as private key, and its public
+key (<em>y</em> where <em>y=g^x mod p</em>) is distributed.</p>
+<p>In 2012, a sufficient size is deemed to be 2048 bits for <em>p</em> and 256 bits for <em>q</em>.
+For more information, see the most recent <a class="rst-reference external" href="http://www.ecrypt.eu.org/documents/D.SPA.17.pdf" target="_top">ECRYPT</a> report.</p>
+<p>DSA is reasonably secure for new designs.</p>
+<p>The algorithm can only be used for authentication (digital signature).
+DSA cannot be used for confidentiality (encryption).</p>
+<p>The values <em>(p,q,g)</em> are called <em>domain parameters</em>;
+they are not sensitive but must be shared by both parties (the signer and the verifier).
+Different signers can share the same domain parameters with no security
+concerns.</p>
+<p>The DSA signature is twice as big as the size of <em>q</em> (64 bytes if <em>q</em> is 256 bit
+long).</p>
+<p>This module provides facilities for generating new DSA keys and for constructing
+them from known components. DSA keys allows you to perform basic signing and
+verification.</p>
+<blockquote>
+<pre class="py-doctest">
+<span class="py-prompt">&gt;&gt;&gt; </span><span class="py-keyword">from</span> Crypto.Random <span class="py-keyword">import</span> random
+<span class="py-prompt">&gt;&gt;&gt; </span><span class="py-keyword">from</span> Crypto.PublicKey <span class="py-keyword">import</span> DSA
+<span class="py-prompt">&gt;&gt;&gt; </span><span class="py-keyword">from</span> Crypto.Hash <span class="py-keyword">import</span> SHA
+<span class="py-prompt">&gt;&gt;&gt;</span>
+<span class="py-prompt">&gt;&gt;&gt; </span>message = <span class="py-string">&quot;Hello&quot;</span>
+<span class="py-prompt">&gt;&gt;&gt; </span>key = DSA.generate(1024)
+<span class="py-prompt">&gt;&gt;&gt; </span>h = SHA.new(message).digest()
+<span class="py-prompt">&gt;&gt;&gt; </span>k = random.StrongRandom().randint(1,key.q-1)
+<span class="py-prompt">&gt;&gt;&gt; </span>sig = key.sign(h,k)
+<span class="py-prompt">&gt;&gt;&gt; </span>...
+<span class="py-prompt">&gt;&gt;&gt; </span><span class="py-keyword">if</span> key.verify(h,sig):
+<span class="py-prompt">&gt;&gt;&gt; </span> <span class="py-keyword">print</span> <span class="py-string">&quot;OK&quot;</span>
+<span class="py-prompt">&gt;&gt;&gt; </span><span class="py-keyword">else</span>:
+<span class="py-prompt">&gt;&gt;&gt; </span> <span class="py-keyword">print</span> <span class="py-string">&quot;Incorrect signature&quot;</span></pre>
+</blockquote>
+
+<!-- ==================== CLASSES ==================== -->
+<a name="section-Classes"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td align="left" colspan="2" class="table-header">
+ <span class="table-header">Classes</span></td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="Crypto.PublicKey.DSA._DSAobj-class.html" class="summary-name">_DSAobj</a><br />
+ Class defining an actual DSA key.
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="Crypto.PublicKey.DSA.DSAImplementation-class.html" class="summary-name">DSAImplementation</a><br />
+ A DSA key factory.
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <a href="Crypto.PublicKey.RSA.error-class.html" class="summary-name">error</a>
+ </td>
+ </tr>
+</table>
+<!-- ==================== FUNCTIONS ==================== -->
+<a name="section-Functions"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td align="left" colspan="2" class="table-header">
+ <span class="table-header">Functions</span></td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="Crypto.PublicKey.DSA-module.html#generate" class="summary-sig-name">generate</a>(<span class="summary-sig-arg">bits</span>,
+ <span class="summary-sig-arg">randfunc</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">progress_func</span>=<span class="summary-sig-default">None</span>)</span><br />
+ Randomly generate a fresh, new DSA key.</td>
+ <td align="right" valign="top">
+
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="Crypto.PublicKey.DSA-module.html#construct" class="summary-sig-name">construct</a>(<span class="summary-sig-arg">tup</span>)</span><br />
+ Construct a DSA key from a tuple of valid DSA components.</td>
+ <td align="right" valign="top">
+
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+</table>
+<!-- ==================== FUNCTION DETAILS ==================== -->
+<a name="section-FunctionDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td align="left" colspan="2" class="table-header">
+ <span class="table-header">Function Details</span></td>
+</tr>
+</table>
+<a name="generate"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">generate</span>(<span class="sig-arg">bits</span>,
+ <span class="sig-arg">randfunc</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">progress_func</span>=<span class="sig-default">None</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ >&nbsp;
+ </td>
+ </tr></table>
+
+ Randomly generate a fresh, new DSA key.
+ <dl class="fields">
+ <dt>Parameters:</dt>
+ <dd><ul class="nomargin-top">
+ <li><strong class="pname"><code>bits</code></strong> (int) - Key length, or size (in bits) of the DSA modulus
+<em>p</em>.
+It must be a multiple of 64, in the closed
+interval [512,1024].</li>
+ <li><strong class="pname"><code>randfunc</code></strong> (callable) - Random number generation function; it should accept
+a single integer N and return a string of random data
+N bytes long.
+If not specified, a new one will be instantiated
+from <tt class="rst-docutils literal">Crypto.Random</tt>.</li>
+ <li><strong class="pname"><code>progress_func</code></strong> (callable) - Optional function that will be called with a short string
+containing the key parameter currently being generated;
+it's useful for interactive applications where a user is
+waiting for a key to be generated.</li>
+ </ul></dd>
+ <dt>Returns:</dt>
+ <dd>A DSA key object (<a href="Crypto.PublicKey.DSA._DSAobj-class.html" class="link">_DSAobj</a>).</dd>
+ <dt>Raises:</dt>
+ <dd><ul class="nomargin-top">
+ <li><code><strong class='fraise'>ValueError</strong></code> - When <strong>bits</strong> is too little, too big, or not a multiple of 64.</li>
+ </ul></dd>
+ </dl>
+<div class="fields"> <p><strong>Attention:</strong>
+ You should always use a cryptographically secure random number generator,
+such as the one defined in the <tt class="rst-docutils literal">Crypto.Random</tt> module; <strong>don't</strong> just use the
+current time and the <tt class="rst-docutils literal">random</tt> module.
+ </p>
+</div></td></tr></table>
+</div>
+<a name="construct"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">construct</span>(<span class="sig-arg">tup</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ >&nbsp;
+ </td>
+ </tr></table>
+
+ <p>Construct a DSA key from a tuple of valid DSA components.</p>
+<p>The modulus <em>p</em> must be a prime.</p>
+<p>The following equations must apply:</p>
+<ul class="rst-simple">
+<li>p-1 = 0 mod q</li>
+<li>g^x = y mod p</li>
+<li>0 &lt; x &lt; q</li>
+<li>1 &lt; g &lt; p</li>
+</ul>
+ <dl class="fields">
+ <dt>Parameters:</dt>
+ <dd><ul class="nomargin-top">
+ <li><p><strong class="pname"><code>tup</code></strong> (tuple) - A tuple of long integers, with 4 or 5 items
+in the following order:</p>
+<ol class="rst-arabic simple">
+<li>Public key (<em>y</em>).</li>
+<li>Sub-group generator (<em>g</em>).</li>
+<li>Modulus, finite field order (<em>p</em>).</li>
+<li>Sub-group order (<em>q</em>).</li>
+<li>Private key (<em>x</em>). Optional.</li>
+</ol></li>
+ </ul></dd>
+ <dt>Returns:</dt>
+ <dd>A DSA key object (<a href="Crypto.PublicKey.DSA._DSAobj-class.html" class="link">_DSAobj</a>).</dd>
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+ <!-- Home link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="Crypto-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Project homepage -->
+ <th class="navbar" align="right" width="100%">
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr><th class="navbar" align="center"
+ ><a href="http://www.pycrypto.org/">PyCrypto.org</a></th>
+ </tr></table></th>
+ </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+ <tr>
+ <td align="left" class="footer">
+ Generated by Epydoc 3.0.1 on Thu May 24 09:02:36 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>