Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 88x 88x 528x 528x 528x 528x 528x 88x 22x 22x 2192x 2192x 2192x 2192x 2192x 2192x 2192x 22x 22x 22x 22x 22x 22x 22x 22x 22x | 'use strict'; const { ObjectKeys, StringPrototypeToLowerCase, } = primordials; const kHashContextNode = 1; const kHashContextWebCrypto = 2; const kHashContextJwkRsa = 3; const kHashContextJwkRsaPss = 4; const kHashContextJwkRsaOaep = 5; const kHashContextJwkHmac = 6; // WebCrypto and JWK use a bunch of different names for the // standard set of SHA-* digest algorithms... which is ... fun. // Here we provide a utility for mapping between them in order // make it easier in the code. const kHashNames = { sha1: { [kHashContextNode]: 'sha1', [kHashContextWebCrypto]: 'SHA-1', [kHashContextJwkRsa]: 'RS1', [kHashContextJwkRsaPss]: 'PS1', [kHashContextJwkRsaOaep]: 'RSA-OAEP', [kHashContextJwkHmac]: 'HS1', }, sha256: { [kHashContextNode]: 'sha256', [kHashContextWebCrypto]: 'SHA-256', [kHashContextJwkRsa]: 'RS256', [kHashContextJwkRsaPss]: 'PS256', [kHashContextJwkRsaOaep]: 'RSA-OAEP-256', [kHashContextJwkHmac]: 'HS256', }, sha384: { [kHashContextNode]: 'sha384', [kHashContextWebCrypto]: 'SHA-384', [kHashContextJwkRsa]: 'RS384', [kHashContextJwkRsaPss]: 'PS384', [kHashContextJwkRsaOaep]: 'RSA-OAEP-384', [kHashContextJwkHmac]: 'HS384', }, sha512: { [kHashContextNode]: 'sha512', [kHashContextWebCrypto]: 'SHA-512', [kHashContextJwkRsa]: 'RS512', [kHashContextJwkRsaPss]: 'PS512', [kHashContextJwkRsaOaep]: 'RSA-OAEP-512', [kHashContextJwkHmac]: 'HS512', } }; { // Index the aliases const keys = ObjectKeys(kHashNames); for (let n = 0; n < keys.length; n++) { const contexts = ObjectKeys(kHashNames[keys[n]]); for (let i = 0; i < contexts.length; i++) { const alias = StringPrototypeToLowerCase(kHashNames[keys[n]][contexts[i]]); if (kHashNames[alias] === undefined) kHashNames[alias] = kHashNames[keys[n]]; } } } function normalizeHashName(name, context = kHashContextNode) { if (typeof name !== 'string') return name; name = StringPrototypeToLowerCase(name); const alias = kHashNames[name] && kHashNames[name][context]; return alias || name; } normalizeHashName.kContextNode = kHashContextNode; normalizeHashName.kContextWebCrypto = kHashContextWebCrypto; normalizeHashName.kContextJwkRsa = kHashContextJwkRsa; normalizeHashName.kContextJwkRsaPss = kHashContextJwkRsaPss; normalizeHashName.kContextJwkRsaOaep = kHashContextJwkRsaOaep; normalizeHashName.kContextJwkHmac = kHashContextJwkHmac; module.exports = normalizeHashName; |