* Returns 0 if the signature is valid, or -1 otherwise
*
*/
-extern int ast_check_signature_bin(struct ast_key *key, char *msg, unsigned char *sig);
+extern int ast_check_signature_bin(struct ast_key *key, char *msg, int msglen, unsigned char *sig);
/*!
* \param key a private key to use to create the signature
* Returns 0 on success or -1 on failure.
*
*/
-extern int ast_sign_bin(struct ast_key *key, char *msg, unsigned char *sig);
+extern int ast_sign_bin(struct ast_key *key, char *msg, int msglen, unsigned char *sig);
#if defined(__cplusplus) || defined(c_plusplus)
}
#endif
-int ast_sign_bin(struct ast_key *key, char *msg, unsigned char *dsig)
+int ast_sign_bin(struct ast_key *key, char *msg, int msglen, unsigned char *dsig)
{
unsigned char digest[20];
int siglen = sizeof(dsig);
}
/* Calculate digest of message */
- SHA1((unsigned char *)msg, strlen(msg), digest);
+ SHA1((unsigned char *)msg, msglen, digest);
/* Verify signature */
res = RSA_sign(NID_sha1, digest, sizeof(digest), dsig, &siglen, key->rsa);
unsigned char dsig[128];
int siglen = sizeof(dsig);
int res;
- res = ast_sign_bin(key, msg, dsig);
+ res = ast_sign_bin(key, msg, strlen(msg), dsig);
if (!res)
/* Success -- encode (256 bytes max as documented) */
ast_base64encode(sig, dsig, siglen, 256);
}
-int ast_check_signature_bin(struct ast_key *key, char *msg, unsigned char *dsig)
+int ast_check_signature_bin(struct ast_key *key, char *msg, int msglen, unsigned char *dsig)
{
unsigned char digest[20];
int res;
}
/* Calculate digest of message */
- SHA1((unsigned char *)msg, strlen(msg), digest);
+ SHA1((unsigned char *)msg, msglen, digest);
/* Verify signature */
res = RSA_verify(NID_sha1, digest, sizeof(digest), dsig, sizeof(dsig), key->rsa);
ast_log(LOG_WARNING, "Signature improper length (expect %d, got %d)\n", (int)sizeof(dsig), (int)res);
return -1;
}
- res = ast_check_signature_bin(key, msg, dsig);
+ res = ast_check_signature_bin(key, msg, strlen(msg), dsig);
return res;
}