diff options
author | daurnimator <quae@daurnimator.com> | 2016-01-03 12:26:31 +1100 |
---|---|---|
committer | daurnimator <quae@daurnimator.com> | 2016-01-03 12:35:24 +1100 |
commit | f3c45dfe948872e18c2685bea57b28f401c49809 (patch) | |
tree | c64546373ade67ee1daeff60e06a5f9c69b56841 | |
parent | 0706e6447e3b6e7b8283686b6f89b46c68f8e1fd (diff) | |
download | luaossl-f3c45dfe948872e18c2685bea57b28f401c49809.tar.gz luaossl-f3c45dfe948872e18c2685bea57b28f401c49809.tar.bz2 luaossl-f3c45dfe948872e18c2685bea57b28f401c49809.zip |
bignum: Add generatePrime as new constructor
-rw-r--r-- | src/openssl.c | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/src/openssl.c b/src/openssl.c index c311ba6..1ea5d16 100644 --- a/src/openssl.c +++ b/src/openssl.c | |||
@@ -223,6 +223,14 @@ static const char *xitoa(char *dst, size_t lim, long i) { | |||
223 | } /* xitoa() */ | 223 | } /* xitoa() */ |
224 | 224 | ||
225 | 225 | ||
226 | static _Bool optbool(lua_State *L, int idx, _Bool d) { | ||
227 | if (lua_isnoneornil(L, idx)) | ||
228 | return d; | ||
229 | luaL_checktype(L, idx, LUA_TBOOLEAN); | ||
230 | return lua_toboolean(L, idx); | ||
231 | } /* optbool() */ | ||
232 | |||
233 | |||
226 | static void *prepudata(lua_State *L, size_t size, const char *tname, int (*gc)(lua_State *)) { | 234 | static void *prepudata(lua_State *L, size_t size, const char *tname, int (*gc)(lua_State *)) { |
227 | void *p = memset(lua_newuserdata(L, size), 0, size); | 235 | void *p = memset(lua_newuserdata(L, size), 0, size); |
228 | 236 | ||
@@ -1976,6 +1984,20 @@ static int bn__gc(lua_State *L) { | |||
1976 | } /* bn__gc() */ | 1984 | } /* bn__gc() */ |
1977 | 1985 | ||
1978 | 1986 | ||
1987 | static int bn_generatePrime(lua_State *L) { | ||
1988 | int bits = luaL_checkinteger(L, 1); | ||
1989 | _Bool safe = optbool(L, 2, 0); | ||
1990 | const BIGNUM *add = lua_isnoneornil(L, 3) ? NULL : checkbig(L, 3); | ||
1991 | const BIGNUM *rem = lua_isnoneornil(L, 4) ? NULL : checkbig(L, 4); | ||
1992 | BIGNUM *bn = bn_push(L); | ||
1993 | |||
1994 | if (!BN_generate_prime_ex(bn, bits, safe, add, rem, NULL)) | ||
1995 | return auxL_error(L, auxL_EOPENSSL, "bignum.generatePrime"); | ||
1996 | |||
1997 | return 1; | ||
1998 | } /* bn_generatePrime() */ | ||
1999 | |||
2000 | |||
1979 | static int bn_isPrime(lua_State *L) { | 2001 | static int bn_isPrime(lua_State *L) { |
1980 | BIGNUM *bn = checksimple(L, 1, BIGNUM_CLASS); | 2002 | BIGNUM *bn = checksimple(L, 1, BIGNUM_CLASS); |
1981 | int nchecks = luaL_optinteger(L, 2, BN_prime_checks); | 2003 | int nchecks = luaL_optinteger(L, 2, BN_prime_checks); |
@@ -2090,9 +2112,10 @@ static const luaL_Reg bn_metatable[] = { | |||
2090 | 2112 | ||
2091 | 2113 | ||
2092 | static const luaL_Reg bn_globals[] = { | 2114 | static const luaL_Reg bn_globals[] = { |
2093 | { "new", &bn_new }, | 2115 | { "new", &bn_new }, |
2094 | { "interpose", &bn_interpose }, | 2116 | { "interpose", &bn_interpose }, |
2095 | { NULL, NULL }, | 2117 | { "generatePrime", &bn_generatePrime }, |
2118 | { NULL, NULL }, | ||
2096 | }; | 2119 | }; |
2097 | 2120 | ||
2098 | int luaopen__openssl_bignum(lua_State *L) { | 2121 | int luaopen__openssl_bignum(lua_State *L) { |