-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathECDH.html
294 lines (226 loc) · 7.67 KB
/
ECDH.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<head>
<title>Zenroom LUA</title>
<link rel="stylesheet" href="" type="text/css" />
</head>
<body>
<div id="container">
<div id="product">
<div id="product_logo"></div>
<div id="product_name"><big><b></b></big></div>
<div id="product_description"></div>
</div> <!-- id="product" -->
<div id="main">
<!-- Menu -->
<div id="navigation">
<br/>
<h1>Zenroom</h1>
<ul>
<li><a href="../index.html">Index</a></li>
</ul>
<h2>Contents</h2>
<ul>
<li><a href="#Class_keyring">Class keyring </a></li>
</ul>
<h2>Modules</h2>
<ul class="nowrap">
<li><a href="../modules/OCTET.html">OCTET</a></li>
<li><a href="../modules/HASH.html">HASH</a></li>
<li><strong>ECDH</strong></li>
<li><a href="../modules/ECP.html">ECP</a></li>
<li><a href="../modules/String.html">String</a></li>
<li><a href="../modules/Table.html">Table</a></li>
<li><a href="../modules/INSPECT.html">INSPECT</a></li>
<li><a href="../modules/ZEN.html">ZEN</a></li>
<li><a href="../modules/BIG.html">BIG</a></li>
</ul>
<h2>Examples</h2>
<ul class="nowrap">
<li><a href="../examples/keygen.lua.html">keygen.lua</a></li>
<li><a href="../examples/crypt-to-multi.lua.html">crypt-to-multi.lua</a></li>
</ul>
</div>
<div id="content">
<h1>Module <code>ECDH</code></h1>
<p>
<h1>Elliptic Curve Diffie-Hellman encryption (ECDH)</h1>
<p> Asymmetric public/private key encryption technologies.</p>
</p>
<p> ECDH encryption and ECDSA signing functionalities are provided by
this module. New keyring instances are instantiated by calling the
new() method, keys can be imported using the</p>
<p> <code>
Alice = ECDH.new()
Bob = ECDH.new()
</code></p>
<p> One can create more keyrings in the same script and call them with
meaningful variable names to help making code more
understandable. Each keyring instance offers methods prefixed with
a double-colon that operate on arguments as well keys contained by
the keyring: this way scripting can focus on the identities
represented by each keyring, giving them names as 'Alice' or
'Bob'.</p>
<h3>Info:</h3>
<ul>
<li><strong>Copyright</strong>: Dyne.org foundation 2017-2019</li>
<li><strong>License</strong>: AGPLv3</li>
<li><strong>Author</strong>: Denis "Jaromil" Roio</li>
</ul>
<h2><a href="#Class_keyring">Class keyring </a></h2>
<table class="function_list">
<tr>
<td class="name" nowrap><a href="#keyring:keygen">keyring:keygen ()</a></td>
<td class="summary">Generate an ECDH public/private key pair for a keyring</p>
<p> Keys generated are both returned and stored inside the
keyring.</td>
</tr>
<tr>
<td class="name" nowrap><a href="#keyring:xy">keyring:xy ()</a></td>
<td class="summary">Returns X and Y coordinates of a public key</td>
</tr>
<tr>
<td class="name" nowrap><a href="#keyring:pubgen">keyring:pubgen (key)</a></td>
<td class="summary">Imports a private key inside an ECDH keyring.</td>
</tr>
<tr>
<td class="name" nowrap><a href="#keyring:sign">keyring:sign (message)</a></td>
<td class="summary">Elliptic Curve Digital Signature Algorithm (ECDSA) signing
function.</td>
</tr>
<tr>
<td class="name" nowrap><a href="#keyring:verify">keyring:verify (message, signature)</a></td>
<td class="summary">Elliptic Curve Digital Signature Algorithm (ECDSA) verification
function.</td>
</tr>
</table>
<br/>
<br/>
<h2 class="section-header has-description"><a name="Class_keyring"></a>Class keyring </h2>
<div class="section-description">
Instance Methods
</div>
<dl class="function">
<dt>
<a name = "keyring:keygen"></a>
<strong>keyring:keygen ()</strong>
</dt>
<dd>
Generate an ECDH public/private key pair for a keyring</p>
<p> Keys generated are both returned and stored inside the
keyring. They can also be retrieved later using the
??? and ??? methods.
()
<h3>Returns:</h3>
<ol>
<li>
<span class="types"><span class="type">OCTET</span></span>
public key</li>
<li>
<span class="types"><span class="type">OCTET</span></span>
private key</li>
</ol>
</dd>
<dt>
<a name = "keyring:xy"></a>
<strong>keyring:xy ()</strong>
</dt>
<dd>
Returns X and Y coordinates of a public key (public_key)
<h3>Returns:</h3>
<ol>
<li>
<span class="types"><span class="type">OCTET</span></span>
coordinate X of public key</li>
<li>
<span class="types"><span class="type">OCTET</span></span>
coordinate Y of public key</li>
</ol>
</dd>
<dt>
<a name = "keyring:pubgen"></a>
<strong>keyring:pubgen (key)</strong>
</dt>
<dd>
Imports a private key inside an ECDH keyring. </p>
<p> This is a get/set method working both ways: without argument it
returns the private key of a keyring, or if an <a href="../modules/OCTET.html#">OCTET</a> argument is
provided it is imported as private key inside the keyring and used
to derivate its corresponding public key.</p>
<p> If the keyring contains already any key, it will refuse to
overwrite them and return an error.
(key)
<h3>Parameters:</h3>
<ul>
<li><span class="parameter">key</span>
[opt] octet of a private key to be imported
</li>
</ul>
</dd>
<dt>
<a name = "keyring:sign"></a>
<strong>keyring:sign (message)</strong>
</dt>
<dd>
Elliptic Curve Digital Signature Algorithm (ECDSA) signing
function. This method uses the private key inside a keyring to sign
a message, returning a signature to be used in <a href="../modules/ECDH.html#keyring:verify">keyring:verify</a>.
(kp.private, message)
<h3>Parameters:</h3>
<ul>
<li><span class="parameter">message</span>
string or <a href="../modules/OCTET.html#">OCTET</a> message to sign
</li>
</ul>
<h3>Returns:</h3>
<ol>
table containing signature parameters octets (r,s)
</ol>
<h3>Usage:</h3>
<ul>
<pre class="example">kp = ECDH.keygen() <span class="comment">-- generate keys or import them
</span>m = <span class="string">"Message to be signed"</span>
signature = ECDH.sign(kp.private, m)
<span class="global">assert</span>( ECDH.verify(kp.public, m, signature) )</pre>
</ul>
</dd>
<dt>
<a name = "keyring:verify"></a>
<strong>keyring:verify (message, signature)</strong>
</dt>
<dd>
Elliptic Curve Digital Signature Algorithm (ECDSA) verification
function. This method uses the public key inside a keyring to verify
a message, returning true or false. The signature parameters are
returned as 'r' and 's' in this same order by <a href="../modules/ECDH.html#keyring:sign">keyring:sign</a>.
(kp.public, message,signature)
<h3>Parameters:</h3>
<ul>
<li><span class="parameter">message</span>
the message whose signature has to be verified
</li>
<li><span class="parameter">signature</span>
the signature table returned by <a href="../modules/ECDH.html#keyring:sign">keyring:sign</a>
</li>
</ul>
<h3>Returns:</h3>
<ol>
true if the signature is OK, or false if not.
</ol>
<h3>See also:</h3>
<ul>
<a href="../modules/ECDH.html#keyring:sign">ECDH.sign</a>
</ul>
</dd>
</dl>
</div> <!-- id="content" -->
</div> <!-- id="main" -->
<div id="about">
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
<i style="float:right;">Last updated 2020-03-13 12:59:05 </i>
</div> <!-- id="about" -->
</div> <!-- id="container" -->
</body>
</html>