| 'use strict'; |
| |
| const common = require('../common'); |
| |
| if (!common.hasCrypto) |
| common.skip('missing crypto'); |
| |
| const assert = require('assert'); |
| const { subtle } = globalThis.crypto; |
| |
| // This is only a partial test. The WebCrypto Web Platform Tests |
| // will provide much greater coverage. |
| |
| // Test Sign/Verify RSASSA-PKCS1-v1_5 |
| { |
| async function test(data) { |
| const ec = new TextEncoder(); |
| const { publicKey, privateKey } = await subtle.generateKey({ |
| name: 'RSASSA-PKCS1-v1_5', |
| modulusLength: 1024, |
| publicExponent: new Uint8Array([1, 0, 1]), |
| hash: 'SHA-256' |
| }, true, ['sign', 'verify']); |
| |
| const signature = await subtle.sign({ |
| name: 'RSASSA-PKCS1-v1_5' |
| }, privateKey, ec.encode(data)); |
| |
| assert(await subtle.verify({ |
| name: 'RSASSA-PKCS1-v1_5' |
| }, publicKey, signature, ec.encode(data))); |
| } |
| |
| test('hello world').then(common.mustCall()); |
| } |
| |
| // Test Sign/Verify RSA-PSS |
| { |
| async function test(data) { |
| const ec = new TextEncoder(); |
| const { publicKey, privateKey } = await subtle.generateKey({ |
| name: 'RSA-PSS', |
| modulusLength: 4096, |
| publicExponent: new Uint8Array([1, 0, 1]), |
| hash: 'SHA-256' |
| }, true, ['sign', 'verify']); |
| |
| const signature = await subtle.sign({ |
| name: 'RSA-PSS', |
| saltLength: 256, |
| }, privateKey, ec.encode(data)); |
| |
| assert(await subtle.verify({ |
| name: 'RSA-PSS', |
| saltLength: 256, |
| }, publicKey, signature, ec.encode(data))); |
| } |
| |
| test('hello world').then(common.mustCall()); |
| } |
| |
| // Test Sign/Verify ECDSA |
| { |
| async function test(data) { |
| const ec = new TextEncoder(); |
| const { publicKey, privateKey } = await subtle.generateKey({ |
| name: 'ECDSA', |
| namedCurve: 'P-384', |
| }, true, ['sign', 'verify']); |
| |
| const signature = await subtle.sign({ |
| name: 'ECDSA', |
| hash: 'SHA-384', |
| }, privateKey, ec.encode(data)); |
| |
| assert(await subtle.verify({ |
| name: 'ECDSA', |
| hash: 'SHA-384', |
| }, publicKey, signature, ec.encode(data))); |
| } |
| |
| test('hello world').then(common.mustCall()); |
| } |
| |
| // Test Sign/Verify HMAC |
| { |
| async function test(data) { |
| const ec = new TextEncoder(); |
| |
| const key = await subtle.generateKey({ |
| name: 'HMAC', |
| length: 256, |
| hash: 'SHA-256' |
| }, true, ['sign', 'verify']); |
| |
| const signature = await subtle.sign({ |
| name: 'HMAC', |
| }, key, ec.encode(data)); |
| |
| assert(await subtle.verify({ |
| name: 'HMAC', |
| }, key, signature, ec.encode(data))); |
| } |
| |
| test('hello world').then(common.mustCall()); |
| } |
| |
| // Test Sign/Verify Ed25519 |
| { |
| async function test(data) { |
| const ec = new TextEncoder(); |
| const { publicKey, privateKey } = await subtle.generateKey({ |
| name: 'Ed25519', |
| }, true, ['sign', 'verify']); |
| |
| const signature = await subtle.sign({ |
| name: 'Ed25519', |
| }, privateKey, ec.encode(data)); |
| |
| assert(await subtle.verify({ |
| name: 'Ed25519', |
| }, publicKey, signature, ec.encode(data))); |
| } |
| |
| test('hello world').then(common.mustCall()); |
| } |
| |
| // Test Sign/Verify Ed448 |
| { |
| async function test(data) { |
| const ec = new TextEncoder(); |
| const { publicKey, privateKey } = await subtle.generateKey({ |
| name: 'Ed448', |
| }, true, ['sign', 'verify']); |
| |
| const signature = await subtle.sign({ |
| name: 'Ed448', |
| }, privateKey, ec.encode(data)); |
| |
| assert(await subtle.verify({ |
| name: 'Ed448', |
| }, publicKey, signature, ec.encode(data))); |
| } |
| |
| test('hello world').then(common.mustCall()); |
| } |