Let crypto_sign_open() accept NULL for the message length pointer

Ditto for edwards25519sha512batch for consistency
Add a _p suffix to lengths that are actually pointers for clarity
This commit is contained in:
Frank Denis
2014-12-28 21:34:59 +01:00
parent 4cd1d03a28
commit cae09d458a
7 changed files with 45 additions and 34 deletions
+6 -6
View File
@@ -45,27 +45,27 @@ crypto_sign_keypair(unsigned char *pk, unsigned char *sk)
}
int
crypto_sign(unsigned char *sm, unsigned long long *smlen,
crypto_sign(unsigned char *sm, unsigned long long *smlen_p,
const unsigned char *m, unsigned long long mlen,
const unsigned char *sk)
{
return crypto_sign_ed25519(sm, smlen, m, mlen, sk);
return crypto_sign_ed25519(sm, smlen_p, m, mlen, sk);
}
int
crypto_sign_open(unsigned char *m, unsigned long long *mlen,
crypto_sign_open(unsigned char *m, unsigned long long *mlen_p,
const unsigned char *sm, unsigned long long smlen,
const unsigned char *pk)
{
return crypto_sign_ed25519_open(m, mlen, sm, smlen, pk);
return crypto_sign_ed25519_open(m, mlen_p, sm, smlen, pk);
}
int
crypto_sign_detached(unsigned char *sig, unsigned long long *siglen,
crypto_sign_detached(unsigned char *sig, unsigned long long *siglen_p,
const unsigned char *m, unsigned long long mlen,
const unsigned char *sk)
{
return crypto_sign_ed25519_detached(sig, siglen, m, mlen, sk);
return crypto_sign_ed25519_detached(sig, siglen_p, m, mlen, sk);
}
int
+13 -6
View File
@@ -48,23 +48,30 @@ crypto_sign_verify_detached(const unsigned char *sig, const unsigned char *m,
}
int
crypto_sign_open(unsigned char *m, unsigned long long *mlen,
crypto_sign_open(unsigned char *m, unsigned long long *mlen_p,
const unsigned char *sm, unsigned long long smlen,
const unsigned char *pk)
{
unsigned long long mlen;
if (smlen < 64 || smlen > SIZE_MAX) {
goto badsig;
}
if (crypto_sign_verify_detached(sm, sm + 64, smlen - 64, pk) != 0) {
memset(m, 0, smlen - 64);
mlen = smlen - 64;
if (crypto_sign_verify_detached(sm, sm + 64, mlen, pk) != 0) {
memset(m, 0, mlen);
goto badsig;
}
*mlen = smlen - 64;
memmove(m, sm + 64, *mlen);
if (mlen_p != NULL) {
*mlen_p = mlen;
}
memmove(m, sm + 64, mlen);
return 0;
badsig:
*mlen = 0;
if (mlen_p != NULL) {
*mlen_p = 0;
}
return -1;
}
@@ -8,7 +8,7 @@
#include "utils.h"
int
crypto_sign_detached(unsigned char *sig, unsigned long long *siglen,
crypto_sign_detached(unsigned char *sig, unsigned long long *siglen_p,
const unsigned char *m, unsigned long long mlen,
const unsigned char *sk)
{
@@ -48,14 +48,14 @@ crypto_sign_detached(unsigned char *sig, unsigned long long *siglen,
sodium_memzero(az, sizeof az);
sodium_memzero(nonce, sizeof nonce);
if (siglen != NULL) {
*siglen = 64U;
if (siglen_p != NULL) {
*siglen_p = 64U;
}
return 0;
}
int
crypto_sign(unsigned char *sm, unsigned long long *smlen,
crypto_sign(unsigned char *sm, unsigned long long *smlen_p,
const unsigned char *m, unsigned long long mlen,
const unsigned char *sk)
{
@@ -66,16 +66,16 @@ crypto_sign(unsigned char *sm, unsigned long long *smlen,
if (crypto_sign_detached(sm, &siglen, sm + crypto_sign_ed25519_BYTES,
mlen, sk) != 0 ||
siglen != crypto_sign_ed25519_BYTES) {
if (smlen != NULL) {
*smlen = 0;
if (smlen_p != NULL) {
*smlen_p = 0;
}
memset(sm, 0, mlen + crypto_sign_ed25519_BYTES);
return -1;
}
/* LCOV_EXCL_STOP */
if (smlen != NULL) {
*smlen = mlen + siglen;
if (smlen_p != NULL) {
*smlen_p = mlen + siglen;
}
return 0;
}
@@ -27,7 +27,7 @@ int crypto_sign_keypair(
}
int crypto_sign(
unsigned char *sm,unsigned long long *smlen,
unsigned char *sm,unsigned long long *smlen_p,
const unsigned char *m,unsigned long long mlen,
const unsigned char *sk
)
@@ -40,7 +40,9 @@ int crypto_sign(
unsigned char hmg[crypto_hash_sha512_BYTES];
unsigned char hmr[crypto_hash_sha512_BYTES];
*smlen = mlen+64;
if (smlen_p != NULL) {
*smlen_p = mlen+64;
}
for(i=0;i<mlen;i++)
sm[32 + i] = m[i];
for(i=0;i<32;i++)
@@ -69,7 +71,7 @@ int crypto_sign(
}
int crypto_sign_open(
unsigned char *m,unsigned long long *mlen,
unsigned char *m,unsigned long long *mlen_p,
const unsigned char *sm,unsigned long long smlen,
const unsigned char *pk
)
@@ -94,9 +96,11 @@ int crypto_sign_open(
ge25519_scalarmult_base(&get2, &scs);
ge25519_pack(t2, &get2);
for(i=0;i<smlen-64;i++)
for(i=0;i<smlen-64;i++) {
m[i] = sm[i + 32];
*mlen = smlen-64;
}
if (mlen_p != NULL) {
*mlen_p = smlen-64;
}
return crypto_verify_32(t1, t2);
}
+3 -3
View File
@@ -48,17 +48,17 @@ SODIUM_EXPORT
int crypto_sign_keypair(unsigned char *pk, unsigned char *sk);
SODIUM_EXPORT
int crypto_sign(unsigned char *sm, unsigned long long *smlen,
int crypto_sign(unsigned char *sm, unsigned long long *smlen_p,
const unsigned char *m, unsigned long long mlen,
const unsigned char *sk);
SODIUM_EXPORT
int crypto_sign_open(unsigned char *m, unsigned long long *mlen,
int crypto_sign_open(unsigned char *m, unsigned long long *mlen_p,
const unsigned char *sm, unsigned long long smlen,
const unsigned char *pk);
SODIUM_EXPORT
int crypto_sign_detached(unsigned char *sig, unsigned long long *siglen,
int crypto_sign_detached(unsigned char *sig, unsigned long long *siglen_p,
const unsigned char *m, unsigned long long mlen,
const unsigned char *sk);
@@ -28,18 +28,18 @@ SODIUM_EXPORT
size_t crypto_sign_ed25519_secretkeybytes(void);
SODIUM_EXPORT
int crypto_sign_ed25519(unsigned char *sm, unsigned long long *smlen,
int crypto_sign_ed25519(unsigned char *sm, unsigned long long *smlen_p,
const unsigned char *m, unsigned long long mlen,
const unsigned char *sk);
SODIUM_EXPORT
int crypto_sign_ed25519_open(unsigned char *m, unsigned long long *mlen,
int crypto_sign_ed25519_open(unsigned char *m, unsigned long long *mlen_p,
const unsigned char *sm, unsigned long long smlen,
const unsigned char *pk);
SODIUM_EXPORT
int crypto_sign_ed25519_detached(unsigned char *sig,
unsigned long long *siglen,
unsigned long long *siglen_p,
const unsigned char *m,
unsigned long long mlen,
const unsigned char *sk);
@@ -36,14 +36,14 @@ size_t crypto_sign_edwards25519sha512batch_secretkeybytes(void);
SODIUM_EXPORT
int crypto_sign_edwards25519sha512batch(unsigned char *sm,
unsigned long long *smlen,
unsigned long long *smlen_p,
const unsigned char *m,
unsigned long long mlen,
const unsigned char *sk);
SODIUM_EXPORT
int crypto_sign_edwards25519sha512batch_open(unsigned char *m,
unsigned long long *mlen,
unsigned long long *mlen_p,
const unsigned char *sm,
unsigned long long smlen,
const unsigned char *pk);