@@ -6,7 +6,7 @@ import type { webcrypto as WebCrypto } from 'crypto'
66import { webcrypto } from 'crypto'
77import type { PublicKey as RSAPubKey } from 'micro-rsa-dsa-dh/rsa.js'
88import { PKCS1_KEM } from 'micro-rsa-dsa-dh/rsa.js'
9- import type { AsymmetricCryptoAlgorithm , Crypto } from '../types/crypto.ts'
9+ import type { AsymmetricCryptoAlgorithm , Crypto , SignatureAlgorithm } from '../types/crypto.ts'
1010import { asciiToUint8Array , concatenateUint8Arrays } from '../utils/generics.ts'
1111import { parseRsaPublicKeyFromAsn1 } from './common.ts'
1212
@@ -116,37 +116,20 @@ export const webcryptoCrypto: Crypto<WebCrypto.CryptoKey> = {
116116 keyUsages = [ 'verify' ]
117117 subtleArgs = {
118118 name : 'RSASSA-PKCS1-v1_5' ,
119- hash : alg === 'RSA-PKCS1-SHA256'
120- ? 'SHA-256'
121- : (
122- alg === 'RSA-PKCS1-SHA384'
123- ? 'SHA-384'
124- : (
125- alg === 'RSA-PKCS1-SHA1'
126- ? 'SHA-1'
127- : 'SHA-512'
128- )
129- )
119+ hash : getHashAlgorithm ( alg ) ,
130120 }
131121 break
132122 case 'RSA-PCKS1_5' :
133123 return parseRsaPublicKeyFromAsn1 ( raw ) as unknown as WebCrypto . CryptoKey
134124 case 'ECDSA-SECP256R1-SHA256' :
135125 case 'ECDSA-SECP256R1-SHA384' :
136- keyType = 'spki'
137- keyUsages = [ 'verify' ]
138- subtleArgs = {
139- name : 'ECDSA' ,
140- namedCurve : 'P-256' ,
141- }
142- break
143126 case 'ECDSA-SECP384R1-SHA384' :
144127 case 'ECDSA-SECP384R1-SHA256' :
145128 keyType = 'spki'
146129 keyUsages = [ 'verify' ]
147130 subtleArgs = {
148131 name : 'ECDSA' ,
149- namedCurve : 'P-384' ,
132+ namedCurve : alg . includes ( 'P256' ) ? 'P-256' : 'P-384' ,
150133 }
151134 break
152135 default :
@@ -306,26 +289,14 @@ export const webcryptoCrypto: Crypto<WebCrypto.CryptoKey> = {
306289 case 'RSA-PKCS1-SHA256' :
307290 case 'RSA-PKCS1-SHA384' :
308291 case 'RSA-PKCS1-SHA1' :
309- verifyArgs = {
310- name : 'RSASSA-PKCS1-v1_5' ,
311- hash : alg === 'RSA-PKCS1-SHA384'
312- ? 'SHA-384'
313- : (
314- alg === 'RSA-PKCS1-SHA1'
315- ? 'SHA-1'
316- : 'SHA-512'
317- )
318- }
292+ verifyArgs = { name : 'RSASSA-PKCS1-v1_5' }
319293 break
320294 case 'ECDSA-SECP256R1-SHA256' :
321295 case 'ECDSA-SECP256R1-SHA384' :
322296 case 'ECDSA-SECP384R1-SHA256' :
323297 case 'ECDSA-SECP384R1-SHA384' :
324298 signature = convertASN1toRS ( signature )
325- verifyArgs = {
326- name : 'ECDSA' ,
327- hash : alg . includes ( 'SHA256' ) ? 'SHA-256' : 'SHA-384'
328- }
299+ verifyArgs = { name : 'ECDSA' , hash : getHashAlgorithm ( alg ) }
329300 break
330301 default :
331302 throw new Error ( `Unsupported algorithm ${ alg } ` )
@@ -383,4 +354,18 @@ function cleanBigNum(bn: Uint8Array) {
383354 }
384355
385356 return bn
357+ }
358+
359+ function getHashAlgorithm ( sig : SignatureAlgorithm ) {
360+ if ( sig . endsWith ( 'SHA256' ) ) {
361+ return 'SHA-256'
362+ } else if ( sig . endsWith ( 'SHA384' ) ) {
363+ return 'SHA-384'
364+ } else if ( sig . endsWith ( 'SHA512' ) ) {
365+ return 'SHA-512'
366+ } else if ( sig . endsWith ( 'SHA1' ) ) {
367+ return 'SHA-1'
368+ }
369+
370+ throw new Error ( `Unsupported signature algorithm: ${ sig } ` )
386371}
0 commit comments