La funzione RSA_verify accetta i seguenti parametri:
int RSA_verify(int type, unsigned char*m, unsigned int m_len,
unsigned char *sigbuf, unsigned int siglen, RSA* rsa);
il primo parametro è il tipo di algoritmo di digest del messaggio, come NID_sha256.
Dato che questo codice non hash il messaggio, la variabile m è il messaggio hash, che scopo c'è di passare il primo parametro?
Il tipo di algoritmo hash è memorizzato da qualche parte, e viene verificato il controllo che lo stesso algoritmo sia utilizzato per verificare come è stato utilizzato per firmare? Se è così, questo int non ha nulla a che fare con la funzione che è stata utilizzata, potrebbe facilmente sbagliare.