1
+ /***
2
+ srp module to handle secure remote password.
3
+ Provide srp_gn as lua object.
4
+
5
+ @module srp
6
+ @usage
7
+ srp = require('openssl').srp
8
+ */
1
9
#include "openssl.h"
2
10
#include "private.h"
3
11
4
12
#ifndef OPENSSL_NO_SRP
5
13
#include <openssl/srp.h>
6
14
#include <openssl/bn.h>
7
15
8
- /* server side */
16
+ /***
17
+ Gets the default SRP_gN object.
18
+ @function get_default_gN
19
+ @tparam string id SRP_gN ID
20
+ @treturn openssl.srp_gn GN SRP_gN object
21
+ */
22
+ static int openssl_srp_get_default_gN (lua_State * L )
23
+ {
24
+ const char * id = luaL_checkstring (L , 1 );
25
+ SRP_gN * GN = SRP_get_default_gN (id );
26
+ if (GN )
27
+ PUSH_OBJECT (GN , "openssl.srp_gn" );
28
+ else
29
+ lua_pushnil (L );
30
+ return 1 ;
31
+ }
32
+
33
+ /***
34
+ Calculates the x value.
35
+ @function calc_x
36
+ @tparam openssl.bn s Salt
37
+ @tparam string username Username
38
+ @tparam string password Password
39
+ @treturn openssl.bn x Value
40
+ */
41
+ static int openssl_srp_calc_x (lua_State * L )
42
+ {
43
+ BIGNUM * s = CHECK_OBJECT (1 , BIGNUM , "openssl.bn" );
44
+ const char * username = luaL_checkstring (L , 2 );
45
+ const char * password = luaL_checkstring (L , 3 );
46
+
47
+ BIGNUM * x = SRP_Calc_x (s , username , password );
48
+ PUSH_OBJECT (x , "openssl.bn" );
49
+ return 1 ;
50
+ }
51
+
52
+ /***
53
+ openssl.srp_gn class.
54
+ @type srp_gn
55
+ */
56
+
57
+ /***
58
+ Creates an SRP verifier.
59
+ @function create_verifier
60
+ @tparam string username Username
61
+ @tparam string servpass Service password
62
+ @treturn openssl.bn salt Salt
63
+ @treturn openssl.bn verifier Verifier
64
+ */
9
65
static int openssl_srp_create_verifier (lua_State * L )
10
66
{
11
67
const SRP_gN * GN = CHECK_OBJECT (1 , SRP_gN , "openssl.srp_gn" );
@@ -29,6 +85,14 @@ static int openssl_srp_create_verifier(lua_State *L)
29
85
#define BN_RAND_BOTTOM_ANY 0
30
86
#endif
31
87
88
+ /***
89
+ Calculates the server's B value.
90
+ @function calc_b
91
+ @tparam openssl.bn v Verifier
92
+ @tparam[opt] int bits Number of random bits, default is 256
93
+ @treturn openssl.bn Bpub Server public key
94
+ @treturn openssl.bn Brnd Server random number
95
+ */
32
96
static int openssl_srp_calc_b (lua_State * L )
33
97
{
34
98
int ret = 0 ;
@@ -61,6 +125,15 @@ static int openssl_srp_calc_b(lua_State *L)
61
125
return ret ;
62
126
}
63
127
128
+ /***
129
+ Calculates the server's key.
130
+ @function calc_server_key
131
+ @tparam openssl.bn Apub Client public key
132
+ @tparam openssl.bn v Verifier
133
+ @tparam openssl.bn u Random number u
134
+ @tparam openssl.bn Brnd Server random number
135
+ @treturn openssl.bn Kserver Server key
136
+ */
64
137
static int openssl_srp_calc_server_key (lua_State * L )
65
138
{
66
139
const SRP_gN * GN = CHECK_OBJECT (1 , SRP_gN , "openssl.srp_gn" );
@@ -76,6 +149,13 @@ static int openssl_srp_calc_server_key(lua_State *L)
76
149
}
77
150
78
151
/* client side */
152
+ /***
153
+ Calculates the client's A value.
154
+ @function calc_a
155
+ @tparam[opt] int bits Number of random bits, default is 256
156
+ @treturn openssl.bn Apub Client public key
157
+ @treturn openssl.bn Arnd Client random number
158
+ ***/
79
159
static int openssl_srp_calc_a (lua_State * L )
80
160
{
81
161
int ret = 0 ;
@@ -107,17 +187,36 @@ static int openssl_srp_calc_a(lua_State *L)
107
187
return ret ;
108
188
}
109
189
110
- static int openssl_srp_calc_x (lua_State * L )
190
+ /* close https://github.com/zhaozg/lua-openssl/issues/312 */
191
+ /***
192
+ Calculates the x value.
193
+ @function calc_x
194
+ @tparam openssl.bn s Salt
195
+ @tparam string username Username
196
+ @tparam string password Password
197
+ @treturn openssl.bn x Value
198
+ */
199
+ static int openssl_srp_calc_X (lua_State * L )
111
200
{
112
- BIGNUM * s = CHECK_OBJECT (1 , BIGNUM , "openssl.bn" );
113
- const char * username = luaL_checkstring (L , 2 );
114
- const char * password = luaL_checkstring (L , 3 );
201
+ const SRP_gN * GN = CHECK_OBJECT (1 , SRP_gN , "openssl.srp_gn" );
202
+ BIGNUM * s = CHECK_OBJECT (2 , BIGNUM , "openssl.bn" );
203
+ const char * username = luaL_checkstring (L , 3 );
204
+ const char * password = luaL_checkstring (L , 4 );
115
205
116
206
BIGNUM * x = SRP_Calc_x (s , username , password );
117
207
PUSH_OBJECT (x , "openssl.bn" );
118
208
return 1 ;
119
209
}
120
210
211
+ /***
212
+ Calculates the client's key.
213
+ @function calc_client_key
214
+ @tparam openssl.bn Bpub Server public key
215
+ @tparam openssl.bn x x Value
216
+ @tparam openssl.bn Arnd Client random number
217
+ @tparam openssl.bn u Random number u
218
+ @treturn openssl.bn Kclient Client key
219
+ */
121
220
static int openssl_srp_calc_client_key (lua_State * L )
122
221
{
123
222
const SRP_gN * GN = CHECK_OBJECT (1 , SRP_gN , "openssl.srp_gn" );
@@ -132,18 +231,13 @@ static int openssl_srp_calc_client_key(lua_State *L)
132
231
return 1 ;
133
232
}
134
233
135
- /* both side */
136
- static int openssl_srp_get_default_gN (lua_State * L )
137
- {
138
- const char * id = luaL_checkstring (L , 1 );
139
- SRP_gN * GN = SRP_get_default_gN (id );
140
- if (GN )
141
- PUSH_OBJECT (GN , "openssl.srp_gn" );
142
- else
143
- lua_pushnil (L );
144
- return 1 ;
145
- }
146
-
234
+ /***
235
+ Calculates the u value.
236
+ @function calc_u
237
+ @tparam openssl.bn Apub Client public key
238
+ @tparam openssl.bn Bpub Server public key
239
+ @treturn openssl.bn u Value
240
+ */
147
241
static int openssl_srp_calc_u (lua_State * L )
148
242
{
149
243
const SRP_gN * GN = CHECK_OBJECT (1 , SRP_gN , "openssl.srp_gn" );
@@ -163,7 +257,7 @@ static luaL_Reg srp_funs[] =
163
257
164
258
/* client side */
165
259
{"calc_a" , openssl_srp_calc_a },
166
- {"calc_x" , openssl_srp_calc_x },
260
+ {"calc_x" , openssl_srp_calc_X },
167
261
{"calc_client_key" , openssl_srp_calc_client_key },
168
262
169
263
/* server side */
@@ -180,6 +274,7 @@ static luaL_Reg srp_funs[] =
180
274
static luaL_Reg R [] =
181
275
{
182
276
{"get_default_gN" , openssl_srp_get_default_gN },
277
+ {"calc_x" , openssl_srp_calc_x },
183
278
184
279
{NULL , NULL }
185
280
};
0 commit comments