Skip to content

Commit 23b1238

Browse files
committed
chore: cleanup hash fn calcs
1 parent c805487 commit 23b1238

File tree

1 file changed

+19
-34
lines changed

1 file changed

+19
-34
lines changed

src/crypto/webcrypto.ts

Lines changed: 19 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import type { webcrypto as WebCrypto } from 'crypto'
66
import { webcrypto } from 'crypto'
77
import type { PublicKey as RSAPubKey } from 'micro-rsa-dsa-dh/rsa.js'
88
import { 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'
1010
import { asciiToUint8Array, concatenateUint8Arrays } from '../utils/generics.ts'
1111
import { 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

Comments
 (0)