public static OBS.Runtime.Internal.IRequest Sign(OBS.Runtime.Internal.IRequest request, String ak, String sk, String region)
        {
            // sign request
            AbstractDISSigner signer = SignerFactory.GetSigner(Constants.SERVICENAME, region);

            signer.Sign(request, new BasicCredentials(ak, sk));
            return(request);
        }
        public static bool VerifySignature(PublicKey publicKey, string signature, string msg)
        {
            byte[] msgBytes = Encoding.UTF8.GetBytes(msg);
            byte[] sigBytes = Convert.FromBase64String(signature);

            ISigner signer = SignerFactory.Sha256withECDSA();

            signer.Init(false, KeyFactory.ECPublicKeyParamsFromPublicKey(publicKey, SignerFactory.Sha256EcdsaDomain));
            signer.BlockUpdate(msgBytes, 0, msgBytes.Length);

            return(signer.VerifySignature(sigBytes));
        }
        public static byte[] SignData(PrivateKey pk, byte[] data)
        {
            ECPrivateKeyParameters privateKeyParams = KeyFactory.ECPrivateKeyParamsFromPrivateKey(pk, SignerFactory.Sha256EcdsaDomain);

            ISigner signer = SignerFactory.Sha256withECDSA();

            signer.Init(true, privateKeyParams);
            signer.BlockUpdate(data, 0, data.Length);

            byte[] signBytes = signer.GenerateSignature();

            return(signBytes);
        }