public static bool CheckCertificateOperationRequestSignature(byte[] operation, byte[] signature,
                                                                     Certificate certificate, Certificate signerCertificate)
        {
            byte[] dataForSign = ArrayUtil.Concat(operation, certificate.EncodedValue);
            if (ArrayUtil.Contains(signerCertificate.PublicKeyAlgName, Constants.ALG_NAME_RSA_UPPERCASE) ||
                ArrayUtil.Contains(signerCertificate.PublicKeyAlgName, Constants.ALG_NAME_RSA_LOWERCASE))
            {
#if NET_CORE
                return(NetCoreSignatureValidator.CheckRSAPSSSha256Signature(signature, dataForSign,
                                                                            signerCertificate.SubjectPublicKeyInfo));
#endif
#if NEO
                return(NeoVMSignatureValidator.CheckSignature(NATIVE_CONTRACT_SHA256WithRSAPSS_ALG_CODE, signature,
                                                              dataForSign,
                                                              signerCertificate.SubjectPublicKeyInfo));
#endif
            }
            else if (ArrayUtil.Contains(signerCertificate.PublicKeyAlgName, Constants.ALG_NAME_EC_UPPERCASE) ||
                     ArrayUtil.Contains(signerCertificate.PublicKeyAlgName, Constants.ALG_NAME_EC_LOWERCASE))
            {
#if NET_CORE
                return(NetCoreSignatureValidator.CheckECDSASha256Signature(signature, dataForSign,
                                                                           signerCertificate.SubjectPublicKeyInfo));
#endif
#if NEO
                return(NeoVMSignatureValidator.CheckSignature(NATIVE_CONTRACT_ECDSAWithSHA256_ALG_CODE, signature,
                                                              dataForSign,
                                                              signerCertificate.SubjectPublicKeyInfo));
#endif
            }

            Logger.log("Unknown Certificate Public Key Algorithm");
            Logger.log(signerCertificate.PublicKeyAlgName);
            return(false);
        }