It seems there is a problem in the ECCPSignDSA function. It fails with ippStsMessageErr when the message digest value is greater than the EC group order value, even if both have the same bit length. That should not happen according to the standards (IEEE1363-2000/10.2.2 or FIPS186-3/6.4), which define that the message digest shall be at most the same length in bits of the group order, but not itsvalue. Similarly, the Nyberg-Rueppel version shall accept messages of at most (n-1) bits of the group order.
Also, the IPP documentation states, incorrectly, for both schemes:
Indicates an error condition if the value of msg pointed by pMsgDigest falls outside the range of [1, 1-n] where n is the order of the elliptic curve base point G.
Definitely, the ippCP manual has typo in "Return Values" description. Namely in ippStsMessageErr explanation.
The legal range of message to be signed is [1,n-1]. Exactly this range is used in the ippsSignDSA check stage.
In attached code (ecc.cpp) the value being signed is (2^256) -1 and goes beyond the order of used EC.
That is why error the code is returned by ippsSignDSA.
Just let you knowthat IPP 7.0.5 released in Intel registration center <<https://registrationcenter.intel.com/>>. The documentation typo was supposed fixed the version. You are welcomed to try it.