diff --git a/ykcs11/ykcs11.c b/ykcs11/ykcs11.c index d1aa456..942c8c0 100644 --- a/ykcs11/ykcs11.c +++ b/ykcs11/ykcs11.c @@ -1865,7 +1865,15 @@ CK_DEFINE_FUNCTION(CK_RV, C_Sign)( if (pSignature == NULL_PTR) { // Just return the size of the signature - *pulSignatureLen = op_info.op.sign.key_len / 8 * 2 + 32; // Approximate the size of the signature. Specs agree with this. + if (is_RSA_mechanism(op_info.mechanism.mechanism)) { + // RSA + *pulSignatureLen = (op_info.op.sign.key_len + 7) / 8; + } + else { + // ECDSA + *pulSignatureLen = ((op_info.op.sign.key_len + 7) / 8) * 2; + } + DBG("The size of the signature will be %lu", *pulSignatureLen); DOUT;