comparison nacl.c @ 7:a139bed53614

Fixed some compiler warnings, added support for unpatched nacl library
author Ivo Smits <Ivo@UCIS.nl>
date Tue, 12 Jul 2011 21:26:46 +0000
parents ded86f4d6275
children a1fc155ca80b
comparison
equal deleted inserted replaced
6:ded86f4d6275 7:a139bed53614
32 #include "nacl/crypto_sign_edwards25519sha512batch.h" 32 #include "nacl/crypto_sign_edwards25519sha512batch.h"
33 33
34 #include "php.h" 34 #include "php.h"
35 #include "php_ini.h" 35 #include "php_ini.h"
36 #include "php_nacl.h" 36 #include "php_nacl.h"
37
38 #if !(defined crypto_box_curve25519xsalsa20poly1305_KEYPAIRRANDOMBYTES || defined crypto_sign_edwards25519sha512batch_KEYPAIRRANDOMBYTES)
39 #include "randombytes.c"
40 #endif
37 41
38 static function_entry nacl_functions[] = { 42 static function_entry nacl_functions[] = {
39 PHP_FE(nacl_crypto_box_curve25519xsalsa20poly1305, NULL) 43 PHP_FE(nacl_crypto_box_curve25519xsalsa20poly1305, NULL)
40 PHP_FE(nacl_crypto_box_curve25519xsalsa20poly1305_open, NULL) 44 PHP_FE(nacl_crypto_box_curve25519xsalsa20poly1305_open, NULL)
41 PHP_FE(nacl_crypto_box_curve25519xsalsa20poly1305_getpublickey, NULL) 45 PHP_FE(nacl_crypto_box_curve25519xsalsa20poly1305_getpublickey, NULL)
75 REGISTER_LONG_CONSTANT("NACL_CRYPTO_BOX_curve25519xsalsa20poly1305_SECRETKEYBYTES", crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES, CONST_CS | CONST_PERSISTENT); 79 REGISTER_LONG_CONSTANT("NACL_CRYPTO_BOX_curve25519xsalsa20poly1305_SECRETKEYBYTES", crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES, CONST_CS | CONST_PERSISTENT);
76 REGISTER_LONG_CONSTANT("NACL_CRYPTO_BOX_curve25519xsalsa20poly1305_BEFORENMBYTES", crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES, CONST_CS | CONST_PERSISTENT); 80 REGISTER_LONG_CONSTANT("NACL_CRYPTO_BOX_curve25519xsalsa20poly1305_BEFORENMBYTES", crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES, CONST_CS | CONST_PERSISTENT);
77 REGISTER_LONG_CONSTANT("NACL_CRYPTO_BOX_curve25519xsalsa20poly1305_NONCEBYTES", crypto_box_curve25519xsalsa20poly1305_NONCEBYTES, CONST_CS | CONST_PERSISTENT); 81 REGISTER_LONG_CONSTANT("NACL_CRYPTO_BOX_curve25519xsalsa20poly1305_NONCEBYTES", crypto_box_curve25519xsalsa20poly1305_NONCEBYTES, CONST_CS | CONST_PERSISTENT);
78 REGISTER_LONG_CONSTANT("NACL_CRYPTO_BOX_curve25519xsalsa20poly1305_ZEROBYTES", crypto_box_curve25519xsalsa20poly1305_ZEROBYTES, CONST_CS | CONST_PERSISTENT); 82 REGISTER_LONG_CONSTANT("NACL_CRYPTO_BOX_curve25519xsalsa20poly1305_ZEROBYTES", crypto_box_curve25519xsalsa20poly1305_ZEROBYTES, CONST_CS | CONST_PERSISTENT);
79 REGISTER_LONG_CONSTANT("NACL_CRYPTO_BOX_curve25519xsalsa20poly1305_BOXZEROBYTES", crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES, CONST_CS | CONST_PERSISTENT); 83 REGISTER_LONG_CONSTANT("NACL_CRYPTO_BOX_curve25519xsalsa20poly1305_BOXZEROBYTES", crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES, CONST_CS | CONST_PERSISTENT);
80 REGISTER_LONG_CONSTANT("NACL_CRYPTO_BOX_curve25519xsalsa20poly1305_KEYPAIRRANDOMBYTES", crypto_box_curve25519xsalsa20poly1305_KEYPAIRRANDOMBYTES, CONST_CS | CONST_PERSISTENT);
81 REGISTER_LONG_CONSTANT("NACL_CRYPTO_SIGN_edwards25519sha512batch_BYTES", crypto_sign_edwards25519sha512batch_BYTES, CONST_CS | CONST_PERSISTENT); 84 REGISTER_LONG_CONSTANT("NACL_CRYPTO_SIGN_edwards25519sha512batch_BYTES", crypto_sign_edwards25519sha512batch_BYTES, CONST_CS | CONST_PERSISTENT);
82 REGISTER_LONG_CONSTANT("NACL_CRYPTO_SIGN_edwards25519sha512batch_PUBLICKEYBYTES", crypto_sign_edwards25519sha512batch_PUBLICKEYBYTES, CONST_CS | CONST_PERSISTENT); 85 REGISTER_LONG_CONSTANT("NACL_CRYPTO_SIGN_edwards25519sha512batch_PUBLICKEYBYTES", crypto_sign_edwards25519sha512batch_PUBLICKEYBYTES, CONST_CS | CONST_PERSISTENT);
83 REGISTER_LONG_CONSTANT("NACL_CRYPTO_SIGN_edwards25519sha512batch_SECRETKEYBYTES", crypto_sign_edwards25519sha512batch_SECRETKEYBYTES, CONST_CS | CONST_PERSISTENT); 86 REGISTER_LONG_CONSTANT("NACL_CRYPTO_SIGN_edwards25519sha512batch_SECRETKEYBYTES", crypto_sign_edwards25519sha512batch_SECRETKEYBYTES, CONST_CS | CONST_PERSISTENT);
87 #if defined crypto_box_curve25519xsalsa20poly1305_KEYPAIRRANDOMBYTES
88 REGISTER_LONG_CONSTANT("NACL_CRYPTO_BOX_curve25519xsalsa20poly1305_KEYPAIRRANDOMBYTES", crypto_box_curve25519xsalsa20poly1305_KEYPAIRRANDOMBYTES, CONST_CS | CONST_PERSISTENT);
89 #endif
90 #if defined crypto_sign_edwards25519sha512batch_KEYPAIRRANDOMBYTES
84 REGISTER_LONG_CONSTANT("NACL_CRYPTO_SIGN_edwards25519sha512batch_KEYPAIRRANDOMBYTES", crypto_sign_edwards25519sha512batch_KEYPAIRRANDOMBYTES, CONST_CS | CONST_PERSISTENT); 91 REGISTER_LONG_CONSTANT("NACL_CRYPTO_SIGN_edwards25519sha512batch_KEYPAIRRANDOMBYTES", crypto_sign_edwards25519sha512batch_KEYPAIRRANDOMBYTES, CONST_CS | CONST_PERSISTENT);
92 #endif
85 } 93 }
86 94
87 PHP_FUNCTION(nacl_crypto_box_curve25519xsalsa20poly1305) { //(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *,const unsigned char *) 95 PHP_FUNCTION(nacl_crypto_box_curve25519xsalsa20poly1305) { //(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *,const unsigned char *)
88 char *m, *n, *pk, *sk; 96 unsigned char *m, *n, *pk, *sk;
89 int lm, ln, lpk, lsk; 97 int lm, ln, lpk, lsk;
90 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssss", &m, &lm, &n, &ln, &pk, &lpk, &sk, &lsk) == FAILURE) RETURN_NULL(); 98 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssss", &m, &lm, &n, &ln, &pk, &lpk, &sk, &lsk) == FAILURE) RETURN_NULL();
91 if (ln != crypto_box_curve25519xsalsa20poly1305_NONCEBYTES) RETURN_FALSE; 99 if (ln != crypto_box_curve25519xsalsa20poly1305_NONCEBYTES) RETURN_FALSE;
92 if (lpk != crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES) RETURN_FALSE; 100 if (lpk != crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES) RETURN_FALSE;
93 if (lsk != crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES) RETURN_FALSE; 101 if (lsk != crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES) RETURN_FALSE;
94 int mlen = lm + crypto_box_curve25519xsalsa20poly1305_ZEROBYTES; 102 int mlen = lm + crypto_box_curve25519xsalsa20poly1305_ZEROBYTES;
95 char* mb = ecalloc(mlen, 1); 103 unsigned char* mb = ecalloc(mlen, 1);
96 char* cb = ecalloc(mlen, 1); 104 unsigned char* cb = ecalloc(mlen, 1);
97 memcpy(mb + crypto_box_curve25519xsalsa20poly1305_ZEROBYTES, m, lm); 105 memcpy(mb + crypto_box_curve25519xsalsa20poly1305_ZEROBYTES, m, lm);
98 int ret = crypto_box_curve25519xsalsa20poly1305(cb, mb, mlen, n, pk, sk); 106 int ret = crypto_box_curve25519xsalsa20poly1305(cb, mb, mlen, n, pk, sk);
99 int clen = mlen - crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES; 107 int clen = mlen - crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES;
100 char* c = emalloc(clen); 108 char* c = emalloc(clen);
101 memcpy(c, cb + crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES, clen); 109 memcpy(c, cb + crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES, clen);
104 if (ret == 0) RETURN_STRINGL(c, clen, 0); 112 if (ret == 0) RETURN_STRINGL(c, clen, 0);
105 efree(c); 113 efree(c);
106 RETURN_FALSE; 114 RETURN_FALSE;
107 } 115 }
108 PHP_FUNCTION(nacl_crypto_box_curve25519xsalsa20poly1305_open) { //(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *,const unsigned char *) 116 PHP_FUNCTION(nacl_crypto_box_curve25519xsalsa20poly1305_open) { //(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *,const unsigned char *)
109 char *c, *n, *pk, *sk; 117 unsigned char *c, *n, *pk, *sk;
110 int lc, ln, lpk, lsk; 118 int lc, ln, lpk, lsk;
111 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssss", &c, &lc, &n, &ln, &pk, &lpk, &sk, &lsk) == FAILURE) RETURN_NULL(); 119 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssss", &c, &lc, &n, &ln, &pk, &lpk, &sk, &lsk) == FAILURE) RETURN_NULL();
112 if (ln != crypto_box_curve25519xsalsa20poly1305_NONCEBYTES) RETURN_FALSE; 120 if (ln != crypto_box_curve25519xsalsa20poly1305_NONCEBYTES) RETURN_FALSE;
113 if (lpk != crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES) RETURN_FALSE; 121 if (lpk != crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES) RETURN_FALSE;
114 if (lsk != crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES) RETURN_FALSE; 122 if (lsk != crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES) RETURN_FALSE;
115 int clen = lc + crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES; 123 int clen = lc + crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES;
116 char* mb = ecalloc(clen, 1); 124 unsigned char* mb = ecalloc(clen, 1);
117 char* cb = ecalloc(clen, 1); 125 unsigned char* cb = ecalloc(clen, 1);
118 memcpy(cb + crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES, c, lc); 126 memcpy(cb + crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES, c, lc);
119 int ret = crypto_box_curve25519xsalsa20poly1305_open(mb, cb, clen, n, pk, sk); 127 int ret = crypto_box_curve25519xsalsa20poly1305_open(mb, cb, clen, n, pk, sk);
120 int mlen = clen - crypto_box_curve25519xsalsa20poly1305_ZEROBYTES; 128 int mlen = clen - crypto_box_curve25519xsalsa20poly1305_ZEROBYTES;
121 char* m = emalloc(mlen); 129 char* m = emalloc(mlen);
122 memcpy(m, mb + crypto_box_curve25519xsalsa20poly1305_ZEROBYTES, mlen); 130 memcpy(m, mb + crypto_box_curve25519xsalsa20poly1305_ZEROBYTES, mlen);
125 if (ret == 0) RETURN_STRINGL(m, mlen, 0); 133 if (ret == 0) RETURN_STRINGL(m, mlen, 0);
126 efree(m); 134 efree(m);
127 RETURN_FALSE; 135 RETURN_FALSE;
128 } 136 }
129 PHP_FUNCTION(nacl_crypto_box_curve25519xsalsa20poly1305_beforenm) { //(unsigned char *,const unsigned char *,const unsigned char *) 137 PHP_FUNCTION(nacl_crypto_box_curve25519xsalsa20poly1305_beforenm) { //(unsigned char *,const unsigned char *,const unsigned char *)
130 char *pk, *sk; 138 unsigned char *pk, *sk;
131 int lpk, lsk; 139 int lpk, lsk;
132 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &pk, &lpk, &sk, &lsk) == FAILURE) RETURN_NULL(); 140 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &pk, &lpk, &sk, &lsk) == FAILURE) RETURN_NULL();
133 if (lpk != crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES) RETURN_FALSE; 141 if (lpk != crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES) RETURN_FALSE;
134 if (lsk != crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES) RETURN_FALSE; 142 if (lsk != crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES) RETURN_FALSE;
135 char* k = emalloc(crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES); 143 unsigned char *k = emalloc(crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES);
136 crypto_box_curve25519xsalsa20poly1305_beforenm(k, pk, sk); 144 crypto_box_curve25519xsalsa20poly1305_beforenm(k, pk, sk);
137 RETURN_STRINGL(k, crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES, 0); 145 RETURN_STRINGL((char*)k, crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES, 0);
138 } 146 }
139 PHP_FUNCTION(nacl_crypto_box_curve25519xsalsa20poly1305_afternm) { //(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *) 147 PHP_FUNCTION(nacl_crypto_box_curve25519xsalsa20poly1305_afternm) { //(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *)
140 char *m, *n, *k; 148 unsigned char *m, *n, *k;
141 int lm, ln, lk; 149 int lm, ln, lk;
142 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss", &m, &lm, &n, &ln, &k, &lk) == FAILURE) RETURN_NULL(); 150 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss", &m, &lm, &n, &ln, &k, &lk) == FAILURE) RETURN_NULL();
143 if (ln != crypto_box_curve25519xsalsa20poly1305_NONCEBYTES) RETURN_FALSE; 151 if (ln != crypto_box_curve25519xsalsa20poly1305_NONCEBYTES) RETURN_FALSE;
144 if (lk != crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES) RETURN_FALSE; 152 if (lk != crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES) RETURN_FALSE;
145 int mlen = lm + crypto_box_curve25519xsalsa20poly1305_ZEROBYTES; 153 int mlen = lm + crypto_box_curve25519xsalsa20poly1305_ZEROBYTES;
146 char* mb = ecalloc(mlen, 1); 154 unsigned char *mb = ecalloc(mlen, 1);
147 char* cb = ecalloc(mlen, 1); 155 unsigned char *cb = ecalloc(mlen, 1);
148 memcpy(mb + crypto_box_curve25519xsalsa20poly1305_ZEROBYTES, m, lm); 156 memcpy(mb + crypto_box_curve25519xsalsa20poly1305_ZEROBYTES, m, lm);
149 int ret = crypto_box_curve25519xsalsa20poly1305_afternm(cb, mb, mlen, n, k); 157 int ret = crypto_box_curve25519xsalsa20poly1305_afternm(cb, mb, mlen, n, k);
150 int clen = mlen - crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES; 158 int clen = mlen - crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES;
151 char* c = emalloc(clen); 159 char *c = emalloc(clen);
152 memcpy(c, cb + crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES, clen); 160 memcpy(c, cb + crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES, clen);
153 efree(mb); 161 efree(mb);
154 efree(cb); 162 efree(cb);
155 if (ret == 0) RETURN_STRINGL(c, clen, 0); 163 if (ret == 0) RETURN_STRINGL(c, clen, 0);
156 efree(c); 164 efree(c);
157 RETURN_FALSE; 165 RETURN_FALSE;
158 } 166 }
159 PHP_FUNCTION(nacl_crypto_box_curve25519xsalsa20poly1305_open_afternm) { //(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *) 167 PHP_FUNCTION(nacl_crypto_box_curve25519xsalsa20poly1305_open_afternm) { //(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *)
160 char *c, *n, *k; 168 unsigned char *c, *n, *k;
161 int lc, ln, lk; 169 int lc, ln, lk;
162 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss", &c, &lc, &n, &ln, &k, &lk) == FAILURE) RETURN_NULL(); 170 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss", &c, &lc, &n, &ln, &k, &lk) == FAILURE) RETURN_NULL();
163 if (ln != crypto_box_curve25519xsalsa20poly1305_NONCEBYTES) RETURN_FALSE; 171 if (ln != crypto_box_curve25519xsalsa20poly1305_NONCEBYTES) RETURN_FALSE;
164 if (lk != crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES) RETURN_FALSE; 172 if (lk != crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES) RETURN_FALSE;
165 int clen = lc + crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES; 173 int clen = lc + crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES;
166 char* mb = ecalloc(clen, 1); 174 unsigned char *mb = ecalloc(clen, 1);
167 char* cb = ecalloc(clen, 1); 175 unsigned char *cb = ecalloc(clen, 1);
168 memcpy(cb + crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES, c, lc); 176 memcpy(cb + crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES, c, lc);
169 int ret = crypto_box_curve25519xsalsa20poly1305_open_afternm(mb, cb, clen, n, k); 177 int ret = crypto_box_curve25519xsalsa20poly1305_open_afternm(mb, cb, clen, n, k);
170 int mlen = clen - crypto_box_curve25519xsalsa20poly1305_ZEROBYTES; 178 int mlen = clen - crypto_box_curve25519xsalsa20poly1305_ZEROBYTES;
171 char* m = emalloc(mlen); 179 char *m = emalloc(mlen);
172 memcpy(m, mb + crypto_box_curve25519xsalsa20poly1305_ZEROBYTES, mlen); 180 memcpy(m, mb + crypto_box_curve25519xsalsa20poly1305_ZEROBYTES, mlen);
173 efree(mb); 181 efree(mb);
174 efree(cb); 182 efree(cb);
175 if (ret == 0) RETURN_STRINGL(m, mlen, 0); 183 if (ret == 0) RETURN_STRINGL(m, mlen, 0);
176 efree(m); 184 efree(m);
177 RETURN_FALSE; 185 RETURN_FALSE;
178 } 186 }
179 PHP_FUNCTION(nacl_crypto_box_curve25519xsalsa20poly1305_getpublickey) { 187 PHP_FUNCTION(nacl_crypto_box_curve25519xsalsa20poly1305_getpublickey) {
180 char base[32] = {9}; 188 unsigned char base[32] = {9};
181 char *sk; 189 unsigned char *sk;
182 int lsk; 190 int lsk;
183 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &sk, &lsk) == FAILURE) RETURN_NULL(); 191 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &sk, &lsk) == FAILURE) RETURN_NULL();
184 if (lsk != crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES) RETURN_FALSE; 192 if (lsk != crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES) RETURN_FALSE;
185 char* pk = emalloc(crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES); 193 unsigned char* pk = emalloc(crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES);
186 crypto_scalarmult_curve25519(pk, sk, base); 194 crypto_scalarmult_curve25519(pk, sk, base);
187 RETURN_STRINGL(pk, crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES, 0); 195 RETURN_STRINGL((char*)pk, crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES, 0);
188 } 196 }
189 PHP_FUNCTION(nacl_crypto_box_curve25519xsalsa20poly1305_keypair) { 197 PHP_FUNCTION(nacl_crypto_box_curve25519xsalsa20poly1305_keypair) {
190 char *rb; 198 unsigned char *rb;
191 int lrb; 199 int lrb;
192 zval *zsk; 200 zval *zsk;
201 #if defined crypto_box_curve25519xsalsa20poly1305_KEYPAIRRANDOMBYTES
193 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zs", &zsk, &rb, &lrb) == FAILURE) RETURN_NULL(); 202 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zs", &zsk, &rb, &lrb) == FAILURE) RETURN_NULL();
194 if (!zsk) RETURN_FALSE; 203 if (!zsk) RETURN_FALSE;
195 if (lrb != crypto_box_curve25519xsalsa20poly1305_KEYPAIRRANDOMBYTES) RETURN_FALSE; 204 if (lrb != crypto_box_curve25519xsalsa20poly1305_KEYPAIRRANDOMBYTES) RETURN_FALSE;
196 char *spk = emalloc(crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES); 205 unsigned char *spk = emalloc(crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES);
197 char *ssk = emalloc(crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES); 206 unsigned char *ssk = emalloc(crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES);
198 int ret = crypto_box_curve25519xsalsa20poly1305_keypair(spk, ssk, rb); 207 int ret = crypto_box_curve25519xsalsa20poly1305_keypair(spk, ssk, rb);
208 #else
209 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|s", &zsk, &rb, &lrb) == FAILURE) RETURN_NULL();
210 if (!zsk) RETURN_FALSE;
211 unsigned char *spk = emalloc(crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES);
212 unsigned char *ssk = emalloc(crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES);
213 int ret = crypto_box_curve25519xsalsa20poly1305_keypair(spk, ssk);
214 #endif
199 if (ret) RETURN_FALSE; 215 if (ret) RETURN_FALSE;
200 zval_dtor(zsk); 216 zval_dtor(zsk);
201 ZVAL_STRINGL(zsk, ssk, crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES, 0); 217 ZVAL_STRINGL(zsk, (char*)ssk, crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES, 0);
202 RETURN_STRINGL(spk, crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES, 0); 218 RETURN_STRINGL((char*)spk, crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES, 0);
203 } 219 }
204 PHP_FUNCTION(nacl_crypto_sign_edwards25519sha512batch) { //(unsigned char *,unsigned long long *,const unsigned char *,unsigned long long,const unsigned char *); 220 PHP_FUNCTION(nacl_crypto_sign_edwards25519sha512batch) { //(unsigned char *,unsigned long long *,const unsigned char *,unsigned long long,const unsigned char *);
205 char *m, *sk; 221 unsigned char *m, *sk;
206 int lm, lsk; 222 int lm, lsk;
207 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &m, &lm, &sk, &lsk) == FAILURE) RETURN_NULL(); 223 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &m, &lm, &sk, &lsk) == FAILURE) RETURN_NULL();
208 if (lsk != crypto_sign_edwards25519sha512batch_SECRETKEYBYTES) RETURN_FALSE; 224 if (lsk != crypto_sign_edwards25519sha512batch_SECRETKEYBYTES) RETURN_FALSE;
209 int smlen = lm + crypto_sign_edwards25519sha512batch_BYTES; 225 long long unsigned int smlen = lm + crypto_sign_edwards25519sha512batch_BYTES;
210 char* smb = emalloc(smlen); 226 unsigned char* smb = emalloc(smlen);
211 int ret = crypto_sign_edwards25519sha512batch(smb, &smlen, m, lm, sk); 227 int ret = crypto_sign_edwards25519sha512batch(smb, &smlen, m, lm, sk);
212 char* sm = emalloc(smlen); 228 char* sm = emalloc(smlen);
213 memcpy(sm, smb, smlen); 229 memcpy(sm, smb, smlen);
214 efree(smb); 230 efree(smb);
215 if (ret == 0) RETURN_STRINGL(sm, smlen, 0); 231 if (ret == 0) RETURN_STRINGL(sm, smlen, 0);
216 efree(sm); 232 efree(sm);
217 RETURN_FALSE; 233 RETURN_FALSE;
218 } 234 }
219 PHP_FUNCTION(nacl_crypto_sign_edwards25519sha512batch_open) { //(unsigned char *,unsigned long long *,const unsigned char *,unsigned long long,const unsigned char *); 235 PHP_FUNCTION(nacl_crypto_sign_edwards25519sha512batch_open) { //(unsigned char *,unsigned long long *,const unsigned char *,unsigned long long,const unsigned char *);
220 char *sm, *pk; 236 unsigned char *sm, *pk;
221 int lsm, lpk; 237 int lsm, lpk;
222 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &sm, &lsm, &pk, &lpk) == FAILURE) RETURN_NULL(); 238 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &sm, &lsm, &pk, &lpk) == FAILURE) RETURN_NULL();
223 if (lpk != crypto_sign_edwards25519sha512batch_PUBLICKEYBYTES) RETURN_FALSE; 239 if (lpk != crypto_sign_edwards25519sha512batch_PUBLICKEYBYTES) RETURN_FALSE;
224 int mlen = lsm; 240 long long unsigned int mlen = lsm;
225 char* mb = emalloc(mlen); 241 unsigned char* mb = emalloc(mlen);
226 int ret = crypto_sign_edwards25519sha512batch_open(mb, &mlen, sm, lsm, pk); 242 int ret = crypto_sign_edwards25519sha512batch_open(mb, &mlen, sm, lsm, pk);
227 char* m = emalloc(mlen); 243 char* m = emalloc(mlen);
228 memcpy(m, mb, mlen); 244 memcpy(m, mb, mlen);
229 efree(mb); 245 efree(mb);
230 if (ret == 0) RETURN_STRINGL(m, mlen, 0); 246 if (ret == 0) RETURN_STRINGL(m, mlen, 0);
231 efree(m); 247 efree(m);
232 RETURN_FALSE; 248 RETURN_FALSE;
233 } 249 }
234 PHP_FUNCTION(nacl_crypto_sign_edwards25519sha512batch_keypair) { //(unsigned char *,unsigned char *); 250 PHP_FUNCTION(nacl_crypto_sign_edwards25519sha512batch_keypair) { //(unsigned char *,unsigned char *);
235 char *rb; 251 unsigned char *rb;
236 int lrb; 252 int lrb;
237 zval *zsk; 253 zval *zsk;
254 #if defined crypto_sign_edwards25519sha512batch_KEYPAIRRANDOMBYTES
238 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zs", &zsk, &rb, &lrb) == FAILURE) RETURN_NULL(); 255 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zs", &zsk, &rb, &lrb) == FAILURE) RETURN_NULL();
239 if (lrb != crypto_sign_edwards25519sha512batch_KEYPAIRRANDOMBYTES) RETURN_FALSE; 256 if (lrb != crypto_sign_edwards25519sha512batch_KEYPAIRRANDOMBYTES) RETURN_FALSE;
240 if (!zsk) RETURN_FALSE; 257 if (!zsk) RETURN_FALSE;
241 char *spk = emalloc(crypto_sign_edwards25519sha512batch_PUBLICKEYBYTES); 258 unsigned char *spk = emalloc(crypto_sign_edwards25519sha512batch_PUBLICKEYBYTES);
242 char *ssk = emalloc(crypto_sign_edwards25519sha512batch_SECRETKEYBYTES); 259 unsigned char *ssk = emalloc(crypto_sign_edwards25519sha512batch_SECRETKEYBYTES);
243 int ret = crypto_sign_edwards25519sha512batch_keypair(spk, ssk, rb); 260 int ret = crypto_sign_edwards25519sha512batch_keypair(spk, ssk, rb);
261 #else
262 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|s", &zsk, &rb, &lrb) == FAILURE) RETURN_NULL();
263 if (!zsk) RETURN_FALSE;
264 unsigned char *spk = emalloc(crypto_sign_edwards25519sha512batch_PUBLICKEYBYTES);
265 unsigned char *ssk = emalloc(crypto_sign_edwards25519sha512batch_SECRETKEYBYTES);
266 int ret = crypto_sign_edwards25519sha512batch_keypair(spk, ssk);
267 #endif
244 if (ret) RETURN_FALSE; 268 if (ret) RETURN_FALSE;
245 zval_dtor(zsk); 269 zval_dtor(zsk);
246 ZVAL_STRINGL(zsk, ssk, crypto_sign_edwards25519sha512batch_SECRETKEYBYTES, 0); 270 ZVAL_STRINGL(zsk, (char*)ssk, crypto_sign_edwards25519sha512batch_SECRETKEYBYTES, 0);
247 RETURN_STRINGL(spk, crypto_sign_edwards25519sha512batch_PUBLICKEYBYTES, 0); 271 RETURN_STRINGL((char*)spk, crypto_sign_edwards25519sha512batch_PUBLICKEYBYTES, 0);
248 } 272 }