如何验证 ECDSA 签名?

Dr *_*ver 7 sendgrid

我正在使用 SendGrid 在发送、单击电子邮件等时接收事件通知。

他们给了我这个“验证”密钥,并说他们使用 ECDSA 来生成公钥/私钥对。他们给了我一把钥匙,但没有告诉我它是什么,我假设它是公钥。

因此,当发送数据时,他们给我一个带有时间戳和正文的签名。

https://sendgrid.com/docs/for-developers/tracking-events/getting-started-event-webhook-security-features/#manage-the-signed-event-webhook-using-the-api

我有以下 NodeJS 代码,但真的不知道如何解决这个问题。缓冲区中的示例对象是 SG 发送的内容。

    const ts = res.headers["X-Twilio-Email-Event-Webhook-Timestamp"];


    const msg = Buffer.of(ts, [
        {
            "email": "iekchimzie1@gmail.com",
            "event": "open",
            "ip": "66.249.93.222",
            "sg_content_type": "html",
            "sg_event_id": "fRVFj9NaRPuLtgrTJcRZYA",
            "sg_message_id": "DZqeK1BjQN-5yOUCykR7WQ.filterdrecv-p3iad2-8ddf98858-xxtk7-19-5EC1C6BE-4F.0",
            "sg_template_id": "d-31ad8dd470384ad1aa6f4dc557f7ee65",
            "sg_template_name": "Untitled_11565020537169",
            "timestamp": 1590198073,
            "useragent": "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)"
        }
    ]);
    const shaMsg = crypto.createHash('sha256').update(msg).digest()

    const isValid = ecdsa.verify(shaMsg, evSig, SG_WEBHOOK_V_KEY);


Run Code Online (Sandbox Code Playgroud)