Как подписать, используя windows crypto API, который можно проверить с помощью OpenSSL? - PullRequest
1 голос
/ 16 апреля 2020

Я использую крипто API для подписи и отправки на веб-сервер, который использует открытый SSL для проверки подписи. Сигнатура успешно проверяется с использованием Windows crypto API, но получает ошибку при проверке с открытым SSL со стороны сервера.

Ошибка:

ECDsa-подпись не является допустимой последовательностью DER

Функция подписи:

  public async sign(data: Uint8Array): Promise<any> {
    if (!this.privateKey) {
        throw new Error('no private key available for signing');
    }
    return window.crypto.subtle.sign(
        this.getKeyParams(),
        this.privateKey,
        data,
    );
}

private getKeyParams(): EcdsaParams {
    return { name: 'ECDSA', hash: coseEllipticCurveNames[ECDSA.ellipticCurveKeys[this.algorithm]] };
}

private async toCOSE(key: CryptoKey): Promise<Map<number, any>> {
    const exportedKey = await window.crypto.subtle.exportKey('jwk', key);
    const attData = new Map();
    attData.set(1, 2); // EC2 key type
    attData.set(3, this.algorithm);
    attData.set(-1, ECDSA.ellipticCurveKeys[this.algorithm]);
    attData.set(-2, base64ToByteArray(exportedKey.x, true));
    attData.set(-3, base64ToByteArray(exportedKey.y, true));
    return attData;
}
...