mirror of
https://github.com/jedisct1/libsodium.git
synced 2026-08-25 08:37:13 +09:00
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:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
+10
-6
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user