2 #include "crypto_hash_sha512.h"
3 #include "crypto_verify_32.h"
8 unsigned char *m
,unsigned long long *mlen
,
9 const unsigned char *sm
,unsigned long long smlen
,
10 const unsigned char *pk
14 unsigned char checkr
[32];
20 if (smlen
< 64) return -1;
21 if (sm
[63] & 224) return -1;
22 if (ge_frombytes_negate_vartime(&A
,pk
) != 0) return -1;
24 for (i
= 0;i
< smlen
;++i
) m
[i
] = sm
[i
];
25 for (i
= 0;i
< 32;++i
) m
[32 + i
] = pk
[i
];
26 crypto_hash_sha512(h
,m
,smlen
);
29 ge_double_scalarmult_vartime(&R
,h
,&A
,sm
+ 32);
30 ge_tobytes(checkr
,&R
);
31 if (crypto_verify_32(checkr
,sm
) != 0) {
32 for (i
= 0;i
< smlen
;++i
) m
[i
] = 0;
36 for (i
= 0;i
< smlen
- 64;++i
) m
[i
] = sm
[64 + i
];
37 for (i
= smlen
- 64;i
< smlen
;++i
) m
[i
] = 0;