int32_t PQCP_SCLOUDPLUS_Cmp(SCLOUDPLUS_Ctx *ctx1, SCLOUDPLUS_Ctx *ctx2)
{
if (ctx1 == NULL || ctx2 == NULL || ctx1->para == NULL || ctx2->para == NULL) {
return PQCP_NULL_INPUT;
};
// 这里的比较长度不应为sizeof(SCLOUDPLUS_Ctx)
if (memcmp(ctx1->para, ctx2->para, sizeof(SCLOUDPLUS_Ctx)) != 0) {
return PQCP_SCLOUDPLUS_CMP_FALSE;
}
// 以下逻辑会导致一边有公私钥、另一边没有时也会返回相等,PkeyCmp 结果会出现假阳性
if (ctx1->publicKey != NULL && ctx2->publicKey != NULL) {
if (memcmp(ctx1->publicKey, ctx2->publicKey, ctx1->para->pkSize) != 0) {
return PQCP_SCLOUDPLUS_CMP_FALSE;
}
}
if (ctx1->privateKey != NULL && ctx2->privateKey != NULL) {
if (memcmp(ctx1->privateKey, ctx2->privateKey, ctx1->para->kemSkSize) != 0) {
return PQCP_SCLOUDPLUS_CMP_FALSE;
}
}
return PQCP_SUCCESS;
}