mirror of
https://github.com/taigrr/arduinolibs
synced 2025-01-18 04:33:12 -08:00
362 lines
20 KiB
HTML
362 lines
20 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
|
<meta name="generator" content="Doxygen 1.8.6"/>
|
|
<title>Arduino Cryptography Library: Ed25519 Class Reference</title>
|
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="jquery.js"></script>
|
|
<script type="text/javascript" src="dynsections.js"></script>
|
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="search/search.js"></script>
|
|
<script type="text/javascript">
|
|
$(document).ready(function() { searchBox.OnSelectItem(0); });
|
|
</script>
|
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
|
</head>
|
|
<body>
|
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
|
<div id="titlearea">
|
|
<table cellspacing="0" cellpadding="0">
|
|
<tbody>
|
|
<tr style="height: 56px;">
|
|
<td style="padding-left: 0.5em;">
|
|
<div id="projectname">Arduino Cryptography Library
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<!-- end header part -->
|
|
<!-- Generated by Doxygen 1.8.6 -->
|
|
<script type="text/javascript">
|
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|
</script>
|
|
<div id="navrow1" class="tabs">
|
|
<ul class="tablist">
|
|
<li><a href="index.html"><span>Main Page</span></a></li>
|
|
<li><a href="pages.html"><span>Related Pages</span></a></li>
|
|
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
|
|
<li><a href="files.html"><span>Files</span></a></li>
|
|
<li>
|
|
<div id="MSearchBox" class="MSearchBoxInactive">
|
|
<span class="left">
|
|
<img id="MSearchSelect" src="search/mag_sel.png"
|
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
alt=""/>
|
|
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
|
onfocus="searchBox.OnSearchFieldFocus(true)"
|
|
onblur="searchBox.OnSearchFieldFocus(false)"
|
|
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
|
</span><span class="right">
|
|
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
|
</span>
|
|
</div>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
<div id="navrow2" class="tabs2">
|
|
<ul class="tablist">
|
|
<li><a href="annotated.html"><span>Class List</span></a></li>
|
|
<li><a href="classes.html"><span>Class Index</span></a></li>
|
|
<li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
|
|
<li><a href="functions.html"><span>Class Members</span></a></li>
|
|
</ul>
|
|
</div>
|
|
<!-- window showing the filter options -->
|
|
<div id="MSearchSelectWindow"
|
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
|
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Pages</a></div>
|
|
|
|
<!-- iframe showing the search results (closed by default) -->
|
|
<div id="MSearchResultsWindow">
|
|
<iframe src="javascript:void(0)" frameborder="0"
|
|
name="MSearchResults" id="MSearchResults">
|
|
</iframe>
|
|
</div>
|
|
|
|
</div><!-- top -->
|
|
<div class="header">
|
|
<div class="summary">
|
|
<a href="#nested-classes">Classes</a> |
|
|
<a href="#pub-static-methods">Static Public Member Functions</a> |
|
|
<a href="classEd25519-members.html">List of all members</a> </div>
|
|
<div class="headertitle">
|
|
<div class="title">Ed25519 Class Reference</div> </div>
|
|
</div><!--header-->
|
|
<div class="contents">
|
|
|
|
<p>Digital signatures based on the elliptic curve modulo 2^255 - 19.
|
|
<a href="classEd25519.html#details">More...</a></p>
|
|
|
|
<p><code>#include <<a class="el" href="Ed25519_8h_source.html">Ed25519.h</a>></code></p>
|
|
<table class="memberdecls">
|
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
|
|
Static Public Member Functions</h2></td></tr>
|
|
<tr class="memitem:a36ecf67b4c5d2d39a31888f56af1f8a5"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classEd25519.html#a36ecf67b4c5d2d39a31888f56af1f8a5">sign</a> (uint8_t signature[64], const uint8_t privateKey[32], const uint8_t publicKey[32], const void *message, size_t len)</td></tr>
|
|
<tr class="memdesc:a36ecf67b4c5d2d39a31888f56af1f8a5"><td class="mdescLeft"> </td><td class="mdescRight">Signs a message using a specific <a class="el" href="classEd25519.html" title="Digital signatures based on the elliptic curve modulo 2^255 - 19. ">Ed25519</a> private key. <a href="#a36ecf67b4c5d2d39a31888f56af1f8a5">More...</a><br/></td></tr>
|
|
<tr class="separator:a36ecf67b4c5d2d39a31888f56af1f8a5"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:ae3e2fc405c9cd8cb1d3ab9b8b452d3e4"><td class="memItemLeft" align="right" valign="top">static bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classEd25519.html#ae3e2fc405c9cd8cb1d3ab9b8b452d3e4">verify</a> (const uint8_t signature[64], const uint8_t publicKey[32], const void *message, size_t len)</td></tr>
|
|
<tr class="memdesc:ae3e2fc405c9cd8cb1d3ab9b8b452d3e4"><td class="mdescLeft"> </td><td class="mdescRight">Verifies a signature using a specific <a class="el" href="classEd25519.html" title="Digital signatures based on the elliptic curve modulo 2^255 - 19. ">Ed25519</a> public key. <a href="#ae3e2fc405c9cd8cb1d3ab9b8b452d3e4">More...</a><br/></td></tr>
|
|
<tr class="separator:ae3e2fc405c9cd8cb1d3ab9b8b452d3e4"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:ab8be5115ac5adc8a556dbac7d7e90d2e"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classEd25519.html#ab8be5115ac5adc8a556dbac7d7e90d2e">generatePrivateKey</a> (uint8_t privateKey[32])</td></tr>
|
|
<tr class="memdesc:ab8be5115ac5adc8a556dbac7d7e90d2e"><td class="mdescLeft"> </td><td class="mdescRight">Generates a private key for <a class="el" href="classEd25519.html" title="Digital signatures based on the elliptic curve modulo 2^255 - 19. ">Ed25519</a> signing operations. <a href="#ab8be5115ac5adc8a556dbac7d7e90d2e">More...</a><br/></td></tr>
|
|
<tr class="separator:ab8be5115ac5adc8a556dbac7d7e90d2e"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:ab62bac52ed07f77f76f3ff0fccd71cb2"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classEd25519.html#ab62bac52ed07f77f76f3ff0fccd71cb2">derivePublicKey</a> (uint8_t publicKey[32], const uint8_t privateKey[32])</td></tr>
|
|
<tr class="memdesc:ab62bac52ed07f77f76f3ff0fccd71cb2"><td class="mdescLeft"> </td><td class="mdescRight">Derives the public key from a private key. <a href="#ab62bac52ed07f77f76f3ff0fccd71cb2">More...</a><br/></td></tr>
|
|
<tr class="separator:ab62bac52ed07f77f76f3ff0fccd71cb2"><td class="memSeparator" colspan="2"> </td></tr>
|
|
</table>
|
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
|
<div class="textblock"><p>Digital signatures based on the elliptic curve modulo 2^255 - 19. </p>
|
|
<p>The first step in creating a digital signature with <a class="el" href="classEd25519.html" title="Digital signatures based on the elliptic curve modulo 2^255 - 19. ">Ed25519</a> is to generate a key pair:</p>
|
|
<div class="fragment"><div class="line">uint8_t privateKey[32];</div>
|
|
<div class="line">uint8_t publicKey[32];</div>
|
|
<div class="line"></div>
|
|
<div class="line"><a class="code" href="classEd25519.html#ab8be5115ac5adc8a556dbac7d7e90d2e">Ed25519::generatePrivateKey</a>(privateKey);</div>
|
|
<div class="line"><a class="code" href="classEd25519.html#ab62bac52ed07f77f76f3ff0fccd71cb2">Ed25519::derivePublicKey</a>(publicKey, privateKey);</div>
|
|
</div><!-- fragment --><p>The application can store both the private and public key for later signing operations. Or it can store just the private key and then derive the public key at the point where signing is to occur.</p>
|
|
<p>Message signing produces a 64-byte signature as follows:</p>
|
|
<div class="fragment"><div class="line">uint8_t message[N];</div>
|
|
<div class="line">uint8_t signature[64];</div>
|
|
<div class="line"></div>
|
|
<div class="line"><a class="code" href="classEd25519.html#a36ecf67b4c5d2d39a31888f56af1f8a5">Ed25519::sign</a>(signature, privateKey, publicKey, message, N);</div>
|
|
</div><!-- fragment --><p>And then to verify the signature:</p>
|
|
<div class="fragment"><div class="line"><span class="keywordflow">if</span> (!<a class="code" href="classEd25519.html#ae3e2fc405c9cd8cb1d3ab9b8b452d3e4">Ed25519::verify</a>(signature, publicKey, message, N)) {</div>
|
|
<div class="line"> <span class="comment">// The signature is invalid.</span></div>
|
|
<div class="line"> ...</div>
|
|
<div class="line">}</div>
|
|
</div><!-- fragment --><dl class="section note"><dt>Note</dt><dd>The public functions in this class need a substantial amount of stack space to store intermediate results while the curve function is being evaluated. About 1.5k of free stack space is recommended for safety.</dd></dl>
|
|
<p>References: <a href="https://tools.ietf.org/html/draft-irtf-cfrg-eddsa-05">https://tools.ietf.org/html/draft-irtf-cfrg-eddsa-05</a></p>
|
|
<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classCurve25519.html" title="Diffie-Hellman key agreement based on the elliptic curve modulo 2^255 - 19. ">Curve25519</a> </dd></dl>
|
|
|
|
<p>Definition at line <a class="el" href="Ed25519_8h_source.html#l00029">29</a> of file <a class="el" href="Ed25519_8h_source.html">Ed25519.h</a>.</p>
|
|
</div><h2 class="groupheader">Member Function Documentation</h2>
|
|
<a class="anchor" id="ab62bac52ed07f77f76f3ff0fccd71cb2"></a>
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">void Ed25519::derivePublicKey </td>
|
|
<td>(</td>
|
|
<td class="paramtype">uint8_t </td>
|
|
<td class="paramname"><em>publicKey</em>[32], </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">const uint8_t </td>
|
|
<td class="paramname"><em>privateKey</em>[32] </td>
|
|
</tr>
|
|
<tr>
|
|
<td></td>
|
|
<td>)</td>
|
|
<td></td><td></td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel">static</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Derives the public key from a private key. </p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">publicKey</td><td>The public key. </td></tr>
|
|
<tr><td class="paramname">privateKey</td><td>The private key.</td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classEd25519.html#ab8be5115ac5adc8a556dbac7d7e90d2e" title="Generates a private key for Ed25519 signing operations. ">generatePrivateKey()</a> </dd></dl>
|
|
|
|
<p>Definition at line <a class="el" href="Ed25519_8cpp_source.html#l00256">256</a> of file <a class="el" href="Ed25519_8cpp_source.html">Ed25519.cpp</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
<a class="anchor" id="ab8be5115ac5adc8a556dbac7d7e90d2e"></a>
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">void Ed25519::generatePrivateKey </td>
|
|
<td>(</td>
|
|
<td class="paramtype">uint8_t </td>
|
|
<td class="paramname"><em>privateKey</em>[32]</td><td>)</td>
|
|
<td></td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel">static</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Generates a private key for <a class="el" href="classEd25519.html" title="Digital signatures based on the elliptic curve modulo 2^255 - 19. ">Ed25519</a> signing operations. </p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">privateKey</td><td>The resulting private key.</td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<p>The private key is generated with <a class="el" href="classRNGClass.html#a418a833cf18198fd7e5d6dbd78c99c29">RNG.rand()</a>. It is the caller's responsibility to ensure that the global random number pool has sufficient entropy to generate the 32 bytes of the key safely before calling this function.</p>
|
|
<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classEd25519.html#ab62bac52ed07f77f76f3ff0fccd71cb2" title="Derives the public key from a private key. ">derivePublicKey()</a> </dd></dl>
|
|
|
|
<p>Definition at line <a class="el" href="Ed25519_8cpp_source.html#l00243">243</a> of file <a class="el" href="Ed25519_8cpp_source.html">Ed25519.cpp</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
<a class="anchor" id="a36ecf67b4c5d2d39a31888f56af1f8a5"></a>
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">void Ed25519::sign </td>
|
|
<td>(</td>
|
|
<td class="paramtype">uint8_t </td>
|
|
<td class="paramname"><em>signature</em>[64], </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">const uint8_t </td>
|
|
<td class="paramname"><em>privateKey</em>[32], </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">const uint8_t </td>
|
|
<td class="paramname"><em>publicKey</em>[32], </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">const void * </td>
|
|
<td class="paramname"><em>message</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">size_t </td>
|
|
<td class="paramname"><em>len</em> </td>
|
|
</tr>
|
|
<tr>
|
|
<td></td>
|
|
<td>)</td>
|
|
<td></td><td></td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel">static</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Signs a message using a specific <a class="el" href="classEd25519.html" title="Digital signatures based on the elliptic curve modulo 2^255 - 19. ">Ed25519</a> private key. </p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">signature</td><td>The signature value. </td></tr>
|
|
<tr><td class="paramname">privateKey</td><td>The private key to use to sign the message. </td></tr>
|
|
<tr><td class="paramname">publicKey</td><td>The public key corresponding to <em>privateKey</em>. </td></tr>
|
|
<tr><td class="paramname">message</td><td>Points to the message to be signed. </td></tr>
|
|
<tr><td class="paramname">len</td><td>The length of the <em>message</em> to be signed.</td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classEd25519.html#ae3e2fc405c9cd8cb1d3ab9b8b452d3e4" title="Verifies a signature using a specific Ed25519 public key. ">verify()</a>, <a class="el" href="classEd25519.html#ab62bac52ed07f77f76f3ff0fccd71cb2" title="Derives the public key from a private key. ">derivePublicKey()</a> </dd></dl>
|
|
|
|
<p>Definition at line <a class="el" href="Ed25519_8cpp_source.html#l00127">127</a> of file <a class="el" href="Ed25519_8cpp_source.html">Ed25519.cpp</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
<a class="anchor" id="ae3e2fc405c9cd8cb1d3ab9b8b452d3e4"></a>
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">bool Ed25519::verify </td>
|
|
<td>(</td>
|
|
<td class="paramtype">const uint8_t </td>
|
|
<td class="paramname"><em>signature</em>[64], </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">const uint8_t </td>
|
|
<td class="paramname"><em>publicKey</em>[32], </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">const void * </td>
|
|
<td class="paramname"><em>message</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">size_t </td>
|
|
<td class="paramname"><em>len</em> </td>
|
|
</tr>
|
|
<tr>
|
|
<td></td>
|
|
<td>)</td>
|
|
<td></td><td></td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel">static</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Verifies a signature using a specific <a class="el" href="classEd25519.html" title="Digital signatures based on the elliptic curve modulo 2^255 - 19. ">Ed25519</a> public key. </p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">signature</td><td>The signature value to be verified. </td></tr>
|
|
<tr><td class="paramname">publicKey</td><td>The public key to use to verify the signature. </td></tr>
|
|
<tr><td class="paramname">message</td><td>The message whose signature is to be verified. </td></tr>
|
|
<tr><td class="paramname">len</td><td>The length of the <em>message</em> to be verified.</td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>Returns true if the <em>signature</em> is valid for <em>message</em>; or false if the <em>signature</em> is not valid.</dd></dl>
|
|
<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classEd25519.html#a36ecf67b4c5d2d39a31888f56af1f8a5" title="Signs a message using a specific Ed25519 private key. ">sign()</a> </dd></dl>
|
|
|
|
<p>Definition at line <a class="el" href="Ed25519_8cpp_source.html#l00189">189</a> of file <a class="el" href="Ed25519_8cpp_source.html">Ed25519.cpp</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
<hr/>The documentation for this class was generated from the following files:<ul>
|
|
<li><a class="el" href="Ed25519_8h_source.html">Ed25519.h</a></li>
|
|
<li><a class="el" href="Ed25519_8cpp_source.html">Ed25519.cpp</a></li>
|
|
</ul>
|
|
</div><!-- contents -->
|
|
<!-- start footer part -->
|
|
<hr class="footer"/><address class="footer"><small>
|
|
Generated on Fri Apr 27 2018 12:01:32 for Arduino Cryptography Library by  <a href="http://www.doxygen.org/index.html">
|
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
|
</a> 1.8.6
|
|
</small></address>
|
|
</body>
|
|
</html>
|