@simplewebauthn/server 7.4.0 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (343) hide show
  1. package/LICENSE.md +11 -14
  2. package/README.md +20 -7
  3. package/{dist → esm}/authentication/generateAuthenticationOptions.d.ts +2 -2
  4. package/esm/authentication/generateAuthenticationOptions.js +36 -0
  5. package/{dist → esm}/authentication/verifyAuthenticationResponse.d.ts +2 -2
  6. package/esm/authentication/verifyAuthenticationResponse.js +164 -0
  7. package/esm/deps.d.ts +11 -0
  8. package/esm/deps.js +14 -0
  9. package/esm/helpers/convertAAGUIDToString.js +17 -0
  10. package/esm/helpers/convertCOSEtoPKCS.js +21 -0
  11. package/{dist → esm}/helpers/convertCertBufferToPEM.d.ts +1 -1
  12. package/esm/helpers/convertCertBufferToPEM.js +31 -0
  13. package/esm/helpers/convertPEMToBytes.js +11 -0
  14. package/{dist → esm}/helpers/convertX509PublicKeyToCOSE.d.ts +1 -1
  15. package/esm/helpers/convertX509PublicKeyToCOSE.js +70 -0
  16. package/{dist → esm}/helpers/cose.d.ts +2 -1
  17. package/esm/helpers/cose.js +81 -0
  18. package/{dist → esm}/helpers/decodeAttestationObject.d.ts +3 -0
  19. package/esm/helpers/decodeAttestationObject.js +13 -0
  20. package/esm/helpers/decodeAuthenticatorExtensions.js +34 -0
  21. package/{dist → esm}/helpers/decodeClientDataJSON.d.ts +3 -0
  22. package/esm/helpers/decodeClientDataJSON.js +13 -0
  23. package/esm/helpers/decodeCredentialPublicKey.d.ts +5 -0
  24. package/esm/helpers/decodeCredentialPublicKey.js +8 -0
  25. package/esm/helpers/fetch.d.ts +8 -0
  26. package/esm/helpers/fetch.js +12 -0
  27. package/esm/helpers/generateChallenge.d.ts +7 -0
  28. package/esm/helpers/generateChallenge.js +21 -0
  29. package/{dist → esm}/helpers/getCertificateInfo.d.ts +1 -1
  30. package/esm/helpers/getCertificateInfo.js +76 -0
  31. package/esm/helpers/index.d.ts +22 -0
  32. package/esm/helpers/index.js +16 -0
  33. package/{dist → esm}/helpers/isCertRevoked.d.ts +1 -1
  34. package/esm/helpers/isCertRevoked.js +98 -0
  35. package/{dist → esm}/helpers/iso/index.d.ts +4 -4
  36. package/esm/helpers/iso/index.js +11 -0
  37. package/esm/helpers/iso/isoBase64URL.js +57 -0
  38. package/{dist → esm}/helpers/iso/isoCBOR.d.ts +1 -1
  39. package/esm/helpers/iso/isoCBOR.js +44 -0
  40. package/{dist → esm}/helpers/iso/isoCrypto/digest.d.ts +1 -1
  41. package/esm/helpers/iso/isoCrypto/digest.js +14 -0
  42. package/{dist → esm}/helpers/iso/isoCrypto/getRandomValues.d.ts +1 -1
  43. package/esm/helpers/iso/isoCrypto/getRandomValues.js +11 -0
  44. package/esm/helpers/iso/isoCrypto/getWebCrypto.d.ts +6 -0
  45. package/esm/helpers/iso/isoCrypto/getWebCrypto.js +40 -0
  46. package/esm/helpers/iso/isoCrypto/importKey.js +8 -0
  47. package/esm/helpers/iso/isoCrypto/index.d.ts +3 -0
  48. package/esm/helpers/iso/isoCrypto/index.js +3 -0
  49. package/{dist → esm}/helpers/iso/isoCrypto/mapCoseAlgToWebCryptoAlg.d.ts +2 -2
  50. package/esm/helpers/iso/isoCrypto/mapCoseAlgToWebCryptoAlg.js +20 -0
  51. package/{dist → esm}/helpers/iso/isoCrypto/mapCoseAlgToWebCryptoKeyAlgName.d.ts +2 -2
  52. package/esm/helpers/iso/isoCrypto/mapCoseAlgToWebCryptoKeyAlgName.js +19 -0
  53. package/esm/helpers/iso/isoCrypto/structs.js +1 -0
  54. package/esm/helpers/iso/isoCrypto/unwrapEC2Signature.js +30 -0
  55. package/{dist → esm}/helpers/iso/isoCrypto/verify.d.ts +1 -1
  56. package/esm/helpers/iso/isoCrypto/verify.js +28 -0
  57. package/{dist → esm}/helpers/iso/isoCrypto/verifyEC2.d.ts +1 -1
  58. package/esm/helpers/iso/isoCrypto/verifyEC2.js +73 -0
  59. package/{dist → esm}/helpers/iso/isoCrypto/verifyOKP.d.ts +1 -1
  60. package/esm/helpers/iso/isoCrypto/verifyOKP.js +51 -0
  61. package/{dist → esm}/helpers/iso/isoCrypto/verifyRSA.d.ts +1 -1
  62. package/esm/helpers/iso/isoCrypto/verifyRSA.js +91 -0
  63. package/esm/helpers/iso/isoUint8Array.js +75 -0
  64. package/{dist → esm}/helpers/logging.d.ts +1 -1
  65. package/esm/helpers/logging.js +19 -0
  66. package/{dist → esm}/helpers/mapX509SignatureAlgToCOSEAlg.d.ts +1 -1
  67. package/esm/helpers/mapX509SignatureAlgToCOSEAlg.js +35 -0
  68. package/esm/helpers/matchExpectedRPID.js +41 -0
  69. package/{dist → esm}/helpers/parseAuthenticatorData.d.ts +4 -1
  70. package/esm/helpers/parseAuthenticatorData.js +71 -0
  71. package/{dist → esm}/helpers/parseBackupFlags.d.ts +4 -1
  72. package/esm/helpers/parseBackupFlags.js +25 -0
  73. package/{dist → esm}/helpers/toHash.d.ts +1 -1
  74. package/esm/helpers/toHash.js +12 -0
  75. package/esm/helpers/validateCertificatePath.js +122 -0
  76. package/{dist → esm}/helpers/verifySignature.d.ts +4 -1
  77. package/esm/helpers/verifySignature.js +32 -0
  78. package/esm/index.d.ts +17 -0
  79. package/esm/index.js +11 -0
  80. package/{dist → esm}/metadata/mdsTypes.d.ts +1 -1
  81. package/esm/metadata/mdsTypes.js +17 -0
  82. package/esm/metadata/parseJWT.js +12 -0
  83. package/{dist → esm}/metadata/verifyAttestationWithMetadata.d.ts +3 -3
  84. package/esm/metadata/verifyAttestationWithMetadata.js +159 -0
  85. package/esm/metadata/verifyJWT.js +37 -0
  86. package/esm/package.json +3 -0
  87. package/{dist → esm}/registration/generateRegistrationOptions.d.ts +2 -2
  88. package/esm/registration/generateRegistrationOptions.js +142 -0
  89. package/esm/registration/verifications/tpm/constants.js +182 -0
  90. package/esm/registration/verifications/tpm/parseCertInfo.js +58 -0
  91. package/esm/registration/verifications/tpm/parsePubArea.js +94 -0
  92. package/{dist → esm}/registration/verifications/tpm/verifyAttestationTPM.d.ts +1 -1
  93. package/esm/registration/verifications/tpm/verifyAttestationTPM.js +323 -0
  94. package/{dist → esm}/registration/verifications/verifyAttestationAndroidKey.d.ts +1 -1
  95. package/esm/registration/verifications/verifyAttestationAndroidKey.js +90 -0
  96. package/{dist → esm}/registration/verifications/verifyAttestationAndroidSafetyNet.d.ts +1 -1
  97. package/esm/registration/verifications/verifyAttestationAndroidSafetyNet.js +112 -0
  98. package/{dist → esm}/registration/verifications/verifyAttestationApple.d.ts +1 -1
  99. package/esm/registration/verifications/verifyAttestationApple.js +57 -0
  100. package/{dist → esm}/registration/verifications/verifyAttestationFIDOU2F.d.ts +1 -1
  101. package/esm/registration/verifications/verifyAttestationFIDOU2F.js +48 -0
  102. package/{dist → esm}/registration/verifications/verifyAttestationPacked.d.ts +1 -1
  103. package/esm/registration/verifications/verifyAttestationPacked.js +105 -0
  104. package/{dist → esm}/registration/verifyRegistrationResponse.d.ts +3 -3
  105. package/esm/registration/verifyRegistrationResponse.js +198 -0
  106. package/esm/services/defaultRootCerts/android-key.js +85 -0
  107. package/esm/services/defaultRootCerts/android-safetynet.js +32 -0
  108. package/esm/services/defaultRootCerts/apple.js +25 -0
  109. package/esm/services/defaultRootCerts/mds.js +32 -0
  110. package/{dist → esm}/services/metadataService.d.ts +1 -1
  111. package/{dist → esm}/services/metadataService.js +52 -36
  112. package/{dist → esm}/services/settingsService.d.ts +1 -1
  113. package/esm/services/settingsService.js +65 -0
  114. package/package.json +40 -42
  115. package/script/authentication/generateAuthenticationOptions.d.ts +23 -0
  116. package/{dist → script}/authentication/generateAuthenticationOptions.js +8 -9
  117. package/script/authentication/verifyAuthenticationResponse.d.ts +66 -0
  118. package/{dist → script}/authentication/verifyAuthenticationResponse.js +25 -23
  119. package/script/deps.d.ts +11 -0
  120. package/script/deps.js +71 -0
  121. package/script/helpers/convertAAGUIDToString.d.ts +4 -0
  122. package/{dist → script}/helpers/convertAAGUIDToString.js +2 -3
  123. package/script/helpers/convertCOSEtoPKCS.d.ts +4 -0
  124. package/{dist → script}/helpers/convertCOSEtoPKCS.js +7 -8
  125. package/script/helpers/convertCertBufferToPEM.d.ts +5 -0
  126. package/{dist → script}/helpers/convertCertBufferToPEM.js +5 -6
  127. package/script/helpers/convertPEMToBytes.d.ts +4 -0
  128. package/{dist → script}/helpers/convertPEMToBytes.js +2 -3
  129. package/script/helpers/convertX509PublicKeyToCOSE.d.ts +2 -0
  130. package/{dist → script}/helpers/convertX509PublicKeyToCOSE.js +21 -25
  131. package/script/helpers/cose.d.ts +98 -0
  132. package/{dist → script}/helpers/cose.js +1 -1
  133. package/script/helpers/decodeAttestationObject.d.ts +29 -0
  134. package/script/helpers/decodeAttestationObject.js +17 -0
  135. package/script/helpers/decodeAuthenticatorExtensions.d.ts +20 -0
  136. package/{dist → script}/helpers/decodeAuthenticatorExtensions.js +2 -3
  137. package/script/helpers/decodeClientDataJSON.d.ts +17 -0
  138. package/script/helpers/decodeClientDataJSON.js +17 -0
  139. package/script/helpers/decodeCredentialPublicKey.d.ts +5 -0
  140. package/script/helpers/decodeCredentialPublicKey.js +12 -0
  141. package/script/helpers/fetch.d.ts +8 -0
  142. package/script/helpers/fetch.js +16 -0
  143. package/script/helpers/generateChallenge.d.ts +7 -0
  144. package/{dist → script}/helpers/generateChallenge.js +9 -6
  145. package/script/helpers/getCertificateInfo.d.ts +31 -0
  146. package/{dist → script}/helpers/getCertificateInfo.js +4 -6
  147. package/script/helpers/index.d.ts +22 -0
  148. package/script/helpers/index.js +59 -0
  149. package/script/helpers/isCertRevoked.d.ts +8 -0
  150. package/{dist → script}/helpers/isCertRevoked.js +20 -25
  151. package/script/helpers/iso/index.d.ts +11 -0
  152. package/{dist → script}/helpers/iso/index.js +4 -5
  153. package/script/helpers/iso/isoBase64URL.d.ts +37 -0
  154. package/{dist → script}/helpers/iso/isoBase64URL.js +9 -13
  155. package/script/helpers/iso/isoCBOR.d.ts +12 -0
  156. package/{dist → script}/helpers/iso/isoCBOR.js +8 -28
  157. package/script/helpers/iso/isoCrypto/digest.d.ts +8 -0
  158. package/script/helpers/iso/isoCrypto/digest.js +18 -0
  159. package/script/helpers/iso/isoCrypto/getRandomValues.d.ts +6 -0
  160. package/script/helpers/iso/isoCrypto/getRandomValues.js +15 -0
  161. package/script/helpers/iso/isoCrypto/getWebCrypto.d.ts +6 -0
  162. package/script/helpers/iso/isoCrypto/getWebCrypto.js +44 -0
  163. package/script/helpers/iso/isoCrypto/importKey.d.ts +4 -0
  164. package/script/helpers/iso/isoCrypto/importKey.js +12 -0
  165. package/script/helpers/iso/isoCrypto/index.d.ts +3 -0
  166. package/{dist → script}/helpers/iso/isoCrypto/index.js +6 -7
  167. package/script/helpers/iso/isoCrypto/mapCoseAlgToWebCryptoAlg.d.ts +6 -0
  168. package/{dist → script}/helpers/iso/isoCrypto/mapCoseAlgToWebCryptoAlg.js +6 -6
  169. package/script/helpers/iso/isoCrypto/mapCoseAlgToWebCryptoKeyAlgName.d.ts +6 -0
  170. package/{dist → script}/helpers/iso/isoCrypto/mapCoseAlgToWebCryptoKeyAlgName.js +5 -6
  171. package/script/helpers/iso/isoCrypto/structs.d.ts +3 -0
  172. package/{dist → script}/helpers/iso/isoCrypto/structs.js +0 -1
  173. package/script/helpers/iso/isoCrypto/unwrapEC2Signature.d.ts +6 -0
  174. package/{dist → script}/helpers/iso/isoCrypto/unwrapEC2Signature.js +4 -6
  175. package/script/helpers/iso/isoCrypto/verify.d.ts +10 -0
  176. package/script/helpers/iso/isoCrypto/verify.js +32 -0
  177. package/script/helpers/iso/isoCrypto/verifyEC2.d.ts +10 -0
  178. package/{dist → script}/helpers/iso/isoCrypto/verifyEC2.js +19 -22
  179. package/script/helpers/iso/isoCrypto/verifyOKP.d.ts +6 -0
  180. package/{dist → script}/helpers/iso/isoCrypto/verifyOKP.js +13 -16
  181. package/script/helpers/iso/isoCrypto/verifyRSA.d.ts +10 -0
  182. package/{dist → script}/helpers/iso/isoCrypto/verifyRSA.js +19 -22
  183. package/script/helpers/iso/isoUint8Array.d.ts +36 -0
  184. package/{dist → script}/helpers/iso/isoUint8Array.js +7 -8
  185. package/script/helpers/logging.d.ts +17 -0
  186. package/{dist → script}/helpers/logging.js +2 -6
  187. package/script/helpers/mapX509SignatureAlgToCOSEAlg.d.ts +8 -0
  188. package/{dist → script}/helpers/mapX509SignatureAlgToCOSEAlg.js +8 -9
  189. package/script/helpers/matchExpectedRPID.d.ts +7 -0
  190. package/{dist → script}/helpers/matchExpectedRPID.js +5 -6
  191. package/script/helpers/parseAuthenticatorData.d.ts +28 -0
  192. package/{dist → script}/helpers/parseAuthenticatorData.js +19 -16
  193. package/script/helpers/parseBackupFlags.d.ts +19 -0
  194. package/{dist → script}/helpers/parseBackupFlags.js +2 -2
  195. package/script/helpers/toHash.d.ts +6 -0
  196. package/{dist → script}/helpers/toHash.js +4 -5
  197. package/script/helpers/validateCertificatePath.d.ts +6 -0
  198. package/{dist → script}/helpers/validateCertificatePath.js +13 -15
  199. package/script/helpers/verifySignature.d.ts +14 -0
  200. package/script/helpers/verifySignature.js +36 -0
  201. package/script/index.d.ts +17 -0
  202. package/script/index.js +19 -0
  203. package/script/metadata/mdsTypes.d.ts +216 -0
  204. package/{dist → script}/metadata/mdsTypes.js +0 -1
  205. package/script/metadata/parseJWT.d.ts +4 -0
  206. package/{dist → script}/metadata/parseJWT.js +3 -4
  207. package/script/metadata/verifyAttestationWithMetadata.d.ts +29 -0
  208. package/{dist → script}/metadata/verifyAttestationWithMetadata.js +24 -22
  209. package/script/metadata/verifyJWT.d.ts +10 -0
  210. package/script/metadata/verifyJWT.js +41 -0
  211. package/script/package.json +3 -0
  212. package/script/registration/generateRegistrationOptions.d.ts +43 -0
  213. package/{dist → script}/registration/generateRegistrationOptions.js +9 -10
  214. package/script/registration/verifications/tpm/constants.d.ts +47 -0
  215. package/{dist → script}/registration/verifications/tpm/constants.js +1 -2
  216. package/script/registration/verifications/tpm/parseCertInfo.d.ts +24 -0
  217. package/{dist → script}/registration/verifications/tpm/parseCertInfo.js +13 -14
  218. package/script/registration/verifications/tpm/parsePubArea.d.ts +43 -0
  219. package/{dist → script}/registration/verifications/tpm/parsePubArea.js +16 -17
  220. package/script/registration/verifications/tpm/verifyAttestationTPM.d.ts +2 -0
  221. package/{dist → script}/registration/verifications/tpm/verifyAttestationTPM.js +58 -58
  222. package/script/registration/verifications/verifyAttestationAndroidKey.d.ts +5 -0
  223. package/{dist → script}/registration/verifications/verifyAttestationAndroidKey.js +22 -26
  224. package/script/registration/verifications/verifyAttestationAndroidSafetyNet.d.ts +5 -0
  225. package/{dist → script}/registration/verifications/verifyAttestationAndroidSafetyNet.js +22 -23
  226. package/script/registration/verifications/verifyAttestationApple.d.ts +2 -0
  227. package/{dist → script}/registration/verifications/verifyAttestationApple.js +15 -17
  228. package/script/registration/verifications/verifyAttestationFIDOU2F.d.ts +5 -0
  229. package/{dist → script}/registration/verifications/verifyAttestationFIDOU2F.js +12 -13
  230. package/script/registration/verifications/verifyAttestationPacked.d.ts +5 -0
  231. package/{dist → script}/registration/verifications/verifyAttestationPacked.js +17 -18
  232. package/script/registration/verifyRegistrationResponse.d.ts +85 -0
  233. package/{dist → script}/registration/verifyRegistrationResponse.js +39 -38
  234. package/script/services/defaultRootCerts/android-key.d.ts +24 -0
  235. package/{dist → script}/services/defaultRootCerts/android-key.js +0 -1
  236. package/script/services/defaultRootCerts/android-safetynet.d.ts +11 -0
  237. package/{dist → script}/services/defaultRootCerts/android-safetynet.js +0 -1
  238. package/script/services/defaultRootCerts/apple.d.ts +11 -0
  239. package/{dist → script}/services/defaultRootCerts/apple.js +0 -1
  240. package/script/services/defaultRootCerts/mds.d.ts +11 -0
  241. package/{dist → script}/services/defaultRootCerts/mds.js +0 -1
  242. package/script/services/metadataService.d.ts +53 -0
  243. package/script/services/metadataService.js +277 -0
  244. package/script/services/settingsService.d.ts +25 -0
  245. package/{dist → script}/services/settingsService.js +21 -13
  246. package/dist/authentication/generateAuthenticationOptions.js.map +0 -1
  247. package/dist/authentication/verifyAuthenticationResponse.js.map +0 -1
  248. package/dist/helpers/convertAAGUIDToString.js.map +0 -1
  249. package/dist/helpers/convertCOSEtoPKCS.js.map +0 -1
  250. package/dist/helpers/convertCertBufferToPEM.js.map +0 -1
  251. package/dist/helpers/convertPEMToBytes.js.map +0 -1
  252. package/dist/helpers/convertX509PublicKeyToCOSE.js.map +0 -1
  253. package/dist/helpers/cose.js.map +0 -1
  254. package/dist/helpers/decodeAttestationObject.js +0 -14
  255. package/dist/helpers/decodeAttestationObject.js.map +0 -1
  256. package/dist/helpers/decodeAuthenticatorExtensions.js.map +0 -1
  257. package/dist/helpers/decodeClientDataJSON.js +0 -14
  258. package/dist/helpers/decodeClientDataJSON.js.map +0 -1
  259. package/dist/helpers/decodeCredentialPublicKey.d.ts +0 -2
  260. package/dist/helpers/decodeCredentialPublicKey.js +0 -9
  261. package/dist/helpers/decodeCredentialPublicKey.js.map +0 -1
  262. package/dist/helpers/generateChallenge.d.ts +0 -4
  263. package/dist/helpers/generateChallenge.js.map +0 -1
  264. package/dist/helpers/getCertificateInfo.js.map +0 -1
  265. package/dist/helpers/index.d.ts +0 -22
  266. package/dist/helpers/index.js +0 -60
  267. package/dist/helpers/index.js.map +0 -1
  268. package/dist/helpers/isCertRevoked.js.map +0 -1
  269. package/dist/helpers/iso/index.js.map +0 -1
  270. package/dist/helpers/iso/isoBase64URL.js.map +0 -1
  271. package/dist/helpers/iso/isoCBOR.js.map +0 -1
  272. package/dist/helpers/iso/isoCrypto/digest.js +0 -21
  273. package/dist/helpers/iso/isoCrypto/digest.js.map +0 -1
  274. package/dist/helpers/iso/isoCrypto/getRandomValues.js +0 -18
  275. package/dist/helpers/iso/isoCrypto/getRandomValues.js.map +0 -1
  276. package/dist/helpers/iso/isoCrypto/importKey.js +0 -13
  277. package/dist/helpers/iso/isoCrypto/importKey.js.map +0 -1
  278. package/dist/helpers/iso/isoCrypto/index.d.ts +0 -3
  279. package/dist/helpers/iso/isoCrypto/index.js.map +0 -1
  280. package/dist/helpers/iso/isoCrypto/mapCoseAlgToWebCryptoAlg.js.map +0 -1
  281. package/dist/helpers/iso/isoCrypto/mapCoseAlgToWebCryptoKeyAlgName.js.map +0 -1
  282. package/dist/helpers/iso/isoCrypto/structs.js.map +0 -1
  283. package/dist/helpers/iso/isoCrypto/unwrapEC2Signature.js.map +0 -1
  284. package/dist/helpers/iso/isoCrypto/verify.js +0 -28
  285. package/dist/helpers/iso/isoCrypto/verify.js.map +0 -1
  286. package/dist/helpers/iso/isoCrypto/verifyEC2.js.map +0 -1
  287. package/dist/helpers/iso/isoCrypto/verifyOKP.js.map +0 -1
  288. package/dist/helpers/iso/isoCrypto/verifyRSA.js.map +0 -1
  289. package/dist/helpers/iso/isoUint8Array.js.map +0 -1
  290. package/dist/helpers/logging.js.map +0 -1
  291. package/dist/helpers/mapX509SignatureAlgToCOSEAlg.js.map +0 -1
  292. package/dist/helpers/matchExpectedRPID.js.map +0 -1
  293. package/dist/helpers/parseAuthenticatorData.js.map +0 -1
  294. package/dist/helpers/parseBackupFlags.js.map +0 -1
  295. package/dist/helpers/toHash.js.map +0 -1
  296. package/dist/helpers/validateCertificatePath.js.map +0 -1
  297. package/dist/helpers/verifySignature.js +0 -33
  298. package/dist/helpers/verifySignature.js.map +0 -1
  299. package/dist/index.d.ts +0 -17
  300. package/dist/index.js +0 -20
  301. package/dist/index.js.map +0 -1
  302. package/dist/metadata/mdsTypes.js.map +0 -1
  303. package/dist/metadata/parseJWT.js.map +0 -1
  304. package/dist/metadata/verifyAttestationWithMetadata.js.map +0 -1
  305. package/dist/metadata/verifyJWT.js +0 -42
  306. package/dist/metadata/verifyJWT.js.map +0 -1
  307. package/dist/registration/generateRegistrationOptions.js.map +0 -1
  308. package/dist/registration/verifications/tpm/constants.js.map +0 -1
  309. package/dist/registration/verifications/tpm/parseCertInfo.js.map +0 -1
  310. package/dist/registration/verifications/tpm/parsePubArea.js.map +0 -1
  311. package/dist/registration/verifications/tpm/verifyAttestationTPM.js.map +0 -1
  312. package/dist/registration/verifications/verifyAttestationAndroidKey.js.map +0 -1
  313. package/dist/registration/verifications/verifyAttestationAndroidSafetyNet.js.map +0 -1
  314. package/dist/registration/verifications/verifyAttestationApple.js.map +0 -1
  315. package/dist/registration/verifications/verifyAttestationFIDOU2F.js.map +0 -1
  316. package/dist/registration/verifications/verifyAttestationPacked.js.map +0 -1
  317. package/dist/registration/verifyRegistrationResponse.js.map +0 -1
  318. package/dist/services/defaultRootCerts/android-key.js.map +0 -1
  319. package/dist/services/defaultRootCerts/android-safetynet.js.map +0 -1
  320. package/dist/services/defaultRootCerts/apple.js.map +0 -1
  321. package/dist/services/defaultRootCerts/mds.js.map +0 -1
  322. package/dist/services/metadataService.js.map +0 -1
  323. package/dist/services/settingsService.js.map +0 -1
  324. /package/{dist → esm}/helpers/convertAAGUIDToString.d.ts +0 -0
  325. /package/{dist → esm}/helpers/convertCOSEtoPKCS.d.ts +0 -0
  326. /package/{dist → esm}/helpers/convertPEMToBytes.d.ts +0 -0
  327. /package/{dist → esm}/helpers/decodeAuthenticatorExtensions.d.ts +0 -0
  328. /package/{dist → esm}/helpers/iso/isoBase64URL.d.ts +0 -0
  329. /package/{dist → esm}/helpers/iso/isoCrypto/importKey.d.ts +0 -0
  330. /package/{dist → esm}/helpers/iso/isoCrypto/structs.d.ts +0 -0
  331. /package/{dist → esm}/helpers/iso/isoCrypto/unwrapEC2Signature.d.ts +0 -0
  332. /package/{dist → esm}/helpers/iso/isoUint8Array.d.ts +0 -0
  333. /package/{dist → esm}/helpers/matchExpectedRPID.d.ts +0 -0
  334. /package/{dist → esm}/helpers/validateCertificatePath.d.ts +0 -0
  335. /package/{dist → esm}/metadata/parseJWT.d.ts +0 -0
  336. /package/{dist → esm}/metadata/verifyJWT.d.ts +0 -0
  337. /package/{dist → esm}/registration/verifications/tpm/constants.d.ts +0 -0
  338. /package/{dist → esm}/registration/verifications/tpm/parseCertInfo.d.ts +0 -0
  339. /package/{dist → esm}/registration/verifications/tpm/parsePubArea.d.ts +0 -0
  340. /package/{dist → esm}/services/defaultRootCerts/android-key.d.ts +0 -0
  341. /package/{dist → esm}/services/defaultRootCerts/android-safetynet.d.ts +0 -0
  342. /package/{dist → esm}/services/defaultRootCerts/apple.d.ts +0 -0
  343. /package/{dist → esm}/services/defaultRootCerts/mds.d.ts +0 -0
@@ -1,13 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.verifyAuthenticationResponse = void 0;
4
- const decodeClientDataJSON_1 = require("../helpers/decodeClientDataJSON");
5
- const toHash_1 = require("../helpers/toHash");
6
- const verifySignature_1 = require("../helpers/verifySignature");
7
- const parseAuthenticatorData_1 = require("../helpers/parseAuthenticatorData");
8
- const parseBackupFlags_1 = require("../helpers/parseBackupFlags");
9
- const matchExpectedRPID_1 = require("../helpers/matchExpectedRPID");
10
- const iso_1 = require("../helpers/iso");
4
+ const decodeClientDataJSON_js_1 = require("../helpers/decodeClientDataJSON.js");
5
+ const toHash_js_1 = require("../helpers/toHash.js");
6
+ const verifySignature_js_1 = require("../helpers/verifySignature.js");
7
+ const parseAuthenticatorData_js_1 = require("../helpers/parseAuthenticatorData.js");
8
+ const parseBackupFlags_js_1 = require("../helpers/parseBackupFlags.js");
9
+ const matchExpectedRPID_js_1 = require("../helpers/matchExpectedRPID.js");
10
+ const index_js_1 = require("../helpers/iso/index.js");
11
11
  /**
12
12
  * Verify that the user has legitimately completed the login process
13
13
  *
@@ -45,10 +45,10 @@ async function verifyAuthenticationResponse(options) {
45
45
  if (!response) {
46
46
  throw new Error('Credential missing response');
47
47
  }
48
- if (typeof (assertionResponse === null || assertionResponse === void 0 ? void 0 : assertionResponse.clientDataJSON) !== 'string') {
48
+ if (typeof assertionResponse?.clientDataJSON !== 'string') {
49
49
  throw new Error('Credential response clientDataJSON was not a string');
50
50
  }
51
- const clientDataJSON = (0, decodeClientDataJSON_1.decodeClientDataJSON)(assertionResponse.clientDataJSON);
51
+ const clientDataJSON = (0, decodeClientDataJSON_js_1.decodeClientDataJSON)(assertionResponse.clientDataJSON);
52
52
  const { type, origin, challenge, tokenBinding } = clientDataJSON;
53
53
  // Make sure we're handling an authentication
54
54
  if (type !== 'webauthn.get') {
@@ -75,13 +75,14 @@ async function verifyAuthenticationResponse(options) {
75
75
  throw new Error(`Unexpected authentication response origin "${origin}", expected "${expectedOrigin}"`);
76
76
  }
77
77
  }
78
- if (!iso_1.isoBase64URL.isBase64url(assertionResponse.authenticatorData)) {
78
+ if (!index_js_1.isoBase64URL.isBase64url(assertionResponse.authenticatorData)) {
79
79
  throw new Error('Credential response authenticatorData was not a base64url string');
80
80
  }
81
- if (!iso_1.isoBase64URL.isBase64url(assertionResponse.signature)) {
81
+ if (!index_js_1.isoBase64URL.isBase64url(assertionResponse.signature)) {
82
82
  throw new Error('Credential response signature was not a base64url string');
83
83
  }
84
- if (assertionResponse.userHandle && typeof assertionResponse.userHandle !== 'string') {
84
+ if (assertionResponse.userHandle &&
85
+ typeof assertionResponse.userHandle !== 'string') {
85
86
  throw new Error('Credential response userHandle was not a string');
86
87
  }
87
88
  if (tokenBinding) {
@@ -92,8 +93,8 @@ async function verifyAuthenticationResponse(options) {
92
93
  throw new Error(`Unexpected tokenBinding status ${tokenBinding.status}`);
93
94
  }
94
95
  }
95
- const authDataBuffer = iso_1.isoBase64URL.toBuffer(assertionResponse.authenticatorData);
96
- const parsedAuthData = (0, parseAuthenticatorData_1.parseAuthenticatorData)(authDataBuffer);
96
+ const authDataBuffer = index_js_1.isoBase64URL.toBuffer(assertionResponse.authenticatorData);
97
+ const parsedAuthData = (0, parseAuthenticatorData_js_1.parseAuthenticatorData)(authDataBuffer);
97
98
  const { rpIdHash, flags, counter, extensionsData } = parsedAuthData;
98
99
  // Make sure the response's RP ID is ours
99
100
  let expectedRPIDs = [];
@@ -103,7 +104,7 @@ async function verifyAuthenticationResponse(options) {
103
104
  else {
104
105
  expectedRPIDs = expectedRPID;
105
106
  }
106
- const matchedRPID = await (0, matchExpectedRPID_1.matchExpectedRPID)(rpIdHash, expectedRPIDs);
107
+ const matchedRPID = await (0, matchExpectedRPID_js_1.matchExpectedRPID)(rpIdHash, expectedRPIDs);
107
108
  if (advancedFIDOConfig !== undefined) {
108
109
  const { userVerification: fidoUserVerification } = advancedFIDOConfig;
109
110
  /**
@@ -115,7 +116,8 @@ async function verifyAuthenticationResponse(options) {
115
116
  throw new Error('User verification required, but user could not be verified');
116
117
  }
117
118
  }
118
- else if (fidoUserVerification === 'preferred' || fidoUserVerification === 'discouraged') {
119
+ else if (fidoUserVerification === 'preferred' ||
120
+ fidoUserVerification === 'discouraged') {
119
121
  // Ignore `flags.uv`
120
122
  }
121
123
  }
@@ -132,19 +134,20 @@ async function verifyAuthenticationResponse(options) {
132
134
  throw new Error('User verification required, but user could not be verified');
133
135
  }
134
136
  }
135
- const clientDataHash = await (0, toHash_1.toHash)(iso_1.isoBase64URL.toBuffer(assertionResponse.clientDataJSON));
136
- const signatureBase = iso_1.isoUint8Array.concat([authDataBuffer, clientDataHash]);
137
- const signature = iso_1.isoBase64URL.toBuffer(assertionResponse.signature);
138
- if ((counter > 0 || authenticator.counter > 0) && counter <= authenticator.counter) {
137
+ const clientDataHash = await (0, toHash_js_1.toHash)(index_js_1.isoBase64URL.toBuffer(assertionResponse.clientDataJSON));
138
+ const signatureBase = index_js_1.isoUint8Array.concat([authDataBuffer, clientDataHash]);
139
+ const signature = index_js_1.isoBase64URL.toBuffer(assertionResponse.signature);
140
+ if ((counter > 0 || authenticator.counter > 0) &&
141
+ counter <= authenticator.counter) {
139
142
  // Error out when the counter in the DB is greater than or equal to the counter in the
140
143
  // dataStruct. It's related to how the authenticator maintains the number of times its been
141
144
  // used for this client. If this happens, then someone's somehow increased the counter
142
145
  // on the device without going through this site
143
146
  throw new Error(`Response counter value ${counter} was lower than expected ${authenticator.counter}`);
144
147
  }
145
- const { credentialDeviceType, credentialBackedUp } = (0, parseBackupFlags_1.parseBackupFlags)(flags);
148
+ const { credentialDeviceType, credentialBackedUp } = (0, parseBackupFlags_js_1.parseBackupFlags)(flags);
146
149
  const toReturn = {
147
- verified: await (0, verifySignature_1.verifySignature)({
150
+ verified: await (0, verifySignature_js_1.verifySignature)({
148
151
  signature,
149
152
  data: signatureBase,
150
153
  credentialPublicKey: authenticator.credentialPublicKey,
@@ -163,4 +166,3 @@ async function verifyAuthenticationResponse(options) {
163
166
  return toReturn;
164
167
  }
165
168
  exports.verifyAuthenticationResponse = verifyAuthenticationResponse;
166
- //# sourceMappingURL=verifyAuthenticationResponse.js.map
@@ -0,0 +1,11 @@
1
+ export type { AttestationConveyancePreference, AuthenticationExtensionsClientInputs, AuthenticationResponseJSON, AuthenticatorDevice, AuthenticatorSelectionCriteria, Base64URLString, COSEAlgorithmIdentifier, CredentialDeviceType, Crypto, PublicKeyCredentialCreationOptionsJSON, PublicKeyCredentialDescriptorFuture, PublicKeyCredentialParameters, PublicKeyCredentialRequestOptionsJSON, RegistrationResponseJSON, UserVerificationRequirement, } from '@simplewebauthn/typescript-types';
2
+ export * as cborx from 'cbor-x';
3
+ export { default as base64 } from '@hexagon/base64';
4
+ export { fetch as crossFetch } from 'cross-fetch';
5
+ export { default as debug } from 'debug';
6
+ export type { Debugger } from '@types/debug';
7
+ export { AsnParser, AsnSerializer } from '@peculiar/asn1-schema';
8
+ export { AuthorityKeyIdentifier, BasicConstraints, Certificate, CertificateList, CRLDistributionPoints, ExtendedKeyUsage, id_ce_authorityKeyIdentifier, id_ce_basicConstraints, id_ce_cRLDistributionPoints, id_ce_extKeyUsage, id_ce_subjectAltName, id_ce_subjectKeyIdentifier, Name, SubjectAlternativeName, SubjectKeyIdentifier, } from '@peculiar/asn1-x509';
9
+ export { ECDSASigValue, ECParameters, id_ecPublicKey, id_secp256r1, id_secp384r1, } from '@peculiar/asn1-ecc';
10
+ export { RSAPublicKey } from '@peculiar/asn1-rsa';
11
+ export { id_ce_keyDescription, KeyDescription } from '@peculiar/asn1-android';
package/script/deps.js ADDED
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.KeyDescription = exports.id_ce_keyDescription = exports.RSAPublicKey = exports.id_secp384r1 = exports.id_secp256r1 = exports.id_ecPublicKey = exports.ECParameters = exports.ECDSASigValue = exports.SubjectKeyIdentifier = exports.SubjectAlternativeName = exports.Name = exports.id_ce_subjectKeyIdentifier = exports.id_ce_subjectAltName = exports.id_ce_extKeyUsage = exports.id_ce_cRLDistributionPoints = exports.id_ce_basicConstraints = exports.id_ce_authorityKeyIdentifier = exports.ExtendedKeyUsage = exports.CRLDistributionPoints = exports.CertificateList = exports.Certificate = exports.BasicConstraints = exports.AuthorityKeyIdentifier = exports.AsnSerializer = exports.AsnParser = exports.debug = exports.crossFetch = exports.base64 = exports.cborx = void 0;
30
+ // cbor (a.k.a. cbor-x in Node land)
31
+ exports.cborx = __importStar(require("cbor-x"));
32
+ // b64 (a.k.a. @hexagon/base64 in Node land)
33
+ var base64_1 = require("@hexagon/base64");
34
+ Object.defineProperty(exports, "base64", { enumerable: true, get: function () { return __importDefault(base64_1).default; } });
35
+ // cross-fetch
36
+ var cross_fetch_1 = require("cross-fetch");
37
+ Object.defineProperty(exports, "crossFetch", { enumerable: true, get: function () { return cross_fetch_1.fetch; } });
38
+ // debug
39
+ var debug_1 = require("debug");
40
+ Object.defineProperty(exports, "debug", { enumerable: true, get: function () { return __importDefault(debug_1).default; } });
41
+ // @peculiar libraries
42
+ var asn1_schema_1 = require("@peculiar/asn1-schema");
43
+ Object.defineProperty(exports, "AsnParser", { enumerable: true, get: function () { return asn1_schema_1.AsnParser; } });
44
+ Object.defineProperty(exports, "AsnSerializer", { enumerable: true, get: function () { return asn1_schema_1.AsnSerializer; } });
45
+ var asn1_x509_1 = require("@peculiar/asn1-x509");
46
+ Object.defineProperty(exports, "AuthorityKeyIdentifier", { enumerable: true, get: function () { return asn1_x509_1.AuthorityKeyIdentifier; } });
47
+ Object.defineProperty(exports, "BasicConstraints", { enumerable: true, get: function () { return asn1_x509_1.BasicConstraints; } });
48
+ Object.defineProperty(exports, "Certificate", { enumerable: true, get: function () { return asn1_x509_1.Certificate; } });
49
+ Object.defineProperty(exports, "CertificateList", { enumerable: true, get: function () { return asn1_x509_1.CertificateList; } });
50
+ Object.defineProperty(exports, "CRLDistributionPoints", { enumerable: true, get: function () { return asn1_x509_1.CRLDistributionPoints; } });
51
+ Object.defineProperty(exports, "ExtendedKeyUsage", { enumerable: true, get: function () { return asn1_x509_1.ExtendedKeyUsage; } });
52
+ Object.defineProperty(exports, "id_ce_authorityKeyIdentifier", { enumerable: true, get: function () { return asn1_x509_1.id_ce_authorityKeyIdentifier; } });
53
+ Object.defineProperty(exports, "id_ce_basicConstraints", { enumerable: true, get: function () { return asn1_x509_1.id_ce_basicConstraints; } });
54
+ Object.defineProperty(exports, "id_ce_cRLDistributionPoints", { enumerable: true, get: function () { return asn1_x509_1.id_ce_cRLDistributionPoints; } });
55
+ Object.defineProperty(exports, "id_ce_extKeyUsage", { enumerable: true, get: function () { return asn1_x509_1.id_ce_extKeyUsage; } });
56
+ Object.defineProperty(exports, "id_ce_subjectAltName", { enumerable: true, get: function () { return asn1_x509_1.id_ce_subjectAltName; } });
57
+ Object.defineProperty(exports, "id_ce_subjectKeyIdentifier", { enumerable: true, get: function () { return asn1_x509_1.id_ce_subjectKeyIdentifier; } });
58
+ Object.defineProperty(exports, "Name", { enumerable: true, get: function () { return asn1_x509_1.Name; } });
59
+ Object.defineProperty(exports, "SubjectAlternativeName", { enumerable: true, get: function () { return asn1_x509_1.SubjectAlternativeName; } });
60
+ Object.defineProperty(exports, "SubjectKeyIdentifier", { enumerable: true, get: function () { return asn1_x509_1.SubjectKeyIdentifier; } });
61
+ var asn1_ecc_1 = require("@peculiar/asn1-ecc");
62
+ Object.defineProperty(exports, "ECDSASigValue", { enumerable: true, get: function () { return asn1_ecc_1.ECDSASigValue; } });
63
+ Object.defineProperty(exports, "ECParameters", { enumerable: true, get: function () { return asn1_ecc_1.ECParameters; } });
64
+ Object.defineProperty(exports, "id_ecPublicKey", { enumerable: true, get: function () { return asn1_ecc_1.id_ecPublicKey; } });
65
+ Object.defineProperty(exports, "id_secp256r1", { enumerable: true, get: function () { return asn1_ecc_1.id_secp256r1; } });
66
+ Object.defineProperty(exports, "id_secp384r1", { enumerable: true, get: function () { return asn1_ecc_1.id_secp384r1; } });
67
+ var asn1_rsa_1 = require("@peculiar/asn1-rsa");
68
+ Object.defineProperty(exports, "RSAPublicKey", { enumerable: true, get: function () { return asn1_rsa_1.RSAPublicKey; } });
69
+ var asn1_android_1 = require("@peculiar/asn1-android");
70
+ Object.defineProperty(exports, "id_ce_keyDescription", { enumerable: true, get: function () { return asn1_android_1.id_ce_keyDescription; } });
71
+ Object.defineProperty(exports, "KeyDescription", { enumerable: true, get: function () { return asn1_android_1.KeyDescription; } });
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Convert the aaguid buffer in authData into a UUID string
3
+ */
4
+ export declare function convertAAGUIDToString(aaguid: Uint8Array): string;
@@ -1,13 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.convertAAGUIDToString = void 0;
4
- const iso_1 = require("./iso");
4
+ const index_js_1 = require("./iso/index.js");
5
5
  /**
6
6
  * Convert the aaguid buffer in authData into a UUID string
7
7
  */
8
8
  function convertAAGUIDToString(aaguid) {
9
9
  // Raw Hex: adce000235bcc60a648b0b25f1f05503
10
- const hex = iso_1.isoUint8Array.toHex(aaguid);
10
+ const hex = index_js_1.isoUint8Array.toHex(aaguid);
11
11
  const segments = [
12
12
  hex.slice(0, 8),
13
13
  hex.slice(8, 12),
@@ -19,4 +19,3 @@ function convertAAGUIDToString(aaguid) {
19
19
  return segments.join('-');
20
20
  }
21
21
  exports.convertAAGUIDToString = convertAAGUIDToString;
22
- //# sourceMappingURL=convertAAGUIDToString.js.map
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Takes COSE-encoded public key and converts it to PKCS key
3
+ */
4
+ export declare function convertCOSEtoPKCS(cosePublicKey: Uint8Array): Uint8Array;
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.convertCOSEtoPKCS = void 0;
4
- const iso_1 = require("./iso");
5
- const cose_1 = require("./cose");
4
+ const index_js_1 = require("./iso/index.js");
5
+ const cose_js_1 = require("./cose.js");
6
6
  /**
7
7
  * Takes COSE-encoded public key and converts it to PKCS key
8
8
  */
@@ -10,17 +10,16 @@ function convertCOSEtoPKCS(cosePublicKey) {
10
10
  // This is a little sloppy, I'm using COSEPublicKeyEC2 since it could have both x and y, but when
11
11
  // there's no y it means it's probably better typed as COSEPublicKeyOKP. I'll leave this for now
12
12
  // and revisit it later if it ever becomes an actual problem.
13
- const struct = iso_1.isoCBOR.decodeFirst(cosePublicKey);
13
+ const struct = index_js_1.isoCBOR.decodeFirst(cosePublicKey);
14
14
  const tag = Uint8Array.from([0x04]);
15
- const x = struct.get(cose_1.COSEKEYS.x);
16
- const y = struct.get(cose_1.COSEKEYS.y);
15
+ const x = struct.get(cose_js_1.COSEKEYS.x);
16
+ const y = struct.get(cose_js_1.COSEKEYS.y);
17
17
  if (!x) {
18
18
  throw new Error('COSE public key was missing x');
19
19
  }
20
20
  if (y) {
21
- return iso_1.isoUint8Array.concat([tag, x, y]);
21
+ return index_js_1.isoUint8Array.concat([tag, x, y]);
22
22
  }
23
- return iso_1.isoUint8Array.concat([tag, x]);
23
+ return index_js_1.isoUint8Array.concat([tag, x]);
24
24
  }
25
25
  exports.convertCOSEtoPKCS = convertCOSEtoPKCS;
26
- //# sourceMappingURL=convertCOSEtoPKCS.js.map
@@ -0,0 +1,5 @@
1
+ import type { Base64URLString } from '../deps.js';
2
+ /**
3
+ * Convert buffer to an OpenSSL-compatible PEM text format.
4
+ */
5
+ export declare function convertCertBufferToPEM(certBuffer: Uint8Array | Base64URLString): string;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.convertCertBufferToPEM = void 0;
4
- const iso_1 = require("./iso");
4
+ const index_js_1 = require("./iso/index.js");
5
5
  /**
6
6
  * Convert buffer to an OpenSSL-compatible PEM text format.
7
7
  */
@@ -11,10 +11,10 @@ function convertCertBufferToPEM(certBuffer) {
11
11
  * Get certBuffer to a base64 representation
12
12
  */
13
13
  if (typeof certBuffer === 'string') {
14
- if (iso_1.isoBase64URL.isBase64url(certBuffer)) {
15
- b64cert = iso_1.isoBase64URL.toBase64(certBuffer);
14
+ if (index_js_1.isoBase64URL.isBase64url(certBuffer)) {
15
+ b64cert = index_js_1.isoBase64URL.toBase64(certBuffer);
16
16
  }
17
- else if (iso_1.isoBase64URL.isBase64(certBuffer)) {
17
+ else if (index_js_1.isoBase64URL.isBase64(certBuffer)) {
18
18
  b64cert = certBuffer;
19
19
  }
20
20
  else {
@@ -22,7 +22,7 @@ function convertCertBufferToPEM(certBuffer) {
22
22
  }
23
23
  }
24
24
  else {
25
- b64cert = iso_1.isoBase64URL.fromBuffer(certBuffer, 'base64');
25
+ b64cert = index_js_1.isoBase64URL.fromBuffer(certBuffer, 'base64');
26
26
  }
27
27
  let PEMKey = '';
28
28
  for (let i = 0; i < Math.ceil(b64cert.length / 64); i += 1) {
@@ -33,4 +33,3 @@ function convertCertBufferToPEM(certBuffer) {
33
33
  return PEMKey;
34
34
  }
35
35
  exports.convertCertBufferToPEM = convertCertBufferToPEM;
36
- //# sourceMappingURL=convertCertBufferToPEM.js.map
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Take a certificate in PEM format and convert it to bytes
3
+ */
4
+ export declare function convertPEMToBytes(pem: string): Uint8Array;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.convertPEMToBytes = void 0;
4
- const iso_1 = require("./iso");
4
+ const index_js_1 = require("./iso/index.js");
5
5
  /**
6
6
  * Take a certificate in PEM format and convert it to bytes
7
7
  */
@@ -10,7 +10,6 @@ function convertPEMToBytes(pem) {
10
10
  .replace('-----BEGIN CERTIFICATE-----', '')
11
11
  .replace('-----END CERTIFICATE-----', '')
12
12
  .replace(/[\n ]/g, '');
13
- return iso_1.isoBase64URL.toBuffer(certBase64, 'base64');
13
+ return index_js_1.isoBase64URL.toBuffer(certBase64, 'base64');
14
14
  }
15
15
  exports.convertPEMToBytes = convertPEMToBytes;
16
- //# sourceMappingURL=convertPEMToBytes.js.map
@@ -0,0 +1,2 @@
1
+ import { COSEPublicKey } from './cose.js';
2
+ export declare function convertX509PublicKeyToCOSE(x509Certificate: Uint8Array): COSEPublicKey;
@@ -1,37 +1,34 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.convertX509PublicKeyToCOSE = void 0;
4
- const asn1_schema_1 = require("@peculiar/asn1-schema");
5
- const asn1_x509_1 = require("@peculiar/asn1-x509");
6
- const asn1_ecc_1 = require("@peculiar/asn1-ecc");
7
- const asn1_rsa_1 = require("@peculiar/asn1-rsa");
8
- const cose_1 = require("./cose");
9
- const mapX509SignatureAlgToCOSEAlg_1 = require("./mapX509SignatureAlgToCOSEAlg");
4
+ const deps_js_1 = require("../deps.js");
5
+ const cose_js_1 = require("./cose.js");
6
+ const mapX509SignatureAlgToCOSEAlg_js_1 = require("./mapX509SignatureAlgToCOSEAlg.js");
10
7
  function convertX509PublicKeyToCOSE(x509Certificate) {
11
8
  let cosePublicKey = new Map();
12
9
  /**
13
10
  * Time to extract the public key from an X.509 certificate
14
11
  */
15
- const x509 = asn1_schema_1.AsnParser.parse(x509Certificate, asn1_x509_1.Certificate);
12
+ const x509 = deps_js_1.AsnParser.parse(x509Certificate, deps_js_1.Certificate);
16
13
  const { tbsCertificate } = x509;
17
14
  const { subjectPublicKeyInfo, signature: _tbsSignature } = tbsCertificate;
18
15
  const signatureAlgorithm = _tbsSignature.algorithm;
19
16
  const publicKeyAlgorithmID = subjectPublicKeyInfo.algorithm.algorithm;
20
- if (publicKeyAlgorithmID === asn1_ecc_1.id_ecPublicKey) {
17
+ if (publicKeyAlgorithmID === deps_js_1.id_ecPublicKey) {
21
18
  /**
22
19
  * EC2 Public Key
23
20
  */
24
21
  if (!subjectPublicKeyInfo.algorithm.parameters) {
25
22
  throw new Error('Certificate public key was missing parameters (EC2)');
26
23
  }
27
- const ecParameters = asn1_schema_1.AsnParser.parse(new Uint8Array(subjectPublicKeyInfo.algorithm.parameters), asn1_ecc_1.ECParameters);
24
+ const ecParameters = deps_js_1.AsnParser.parse(new Uint8Array(subjectPublicKeyInfo.algorithm.parameters), deps_js_1.ECParameters);
28
25
  let crv = -999;
29
26
  const { namedCurve } = ecParameters;
30
- if (namedCurve === asn1_ecc_1.id_secp256r1) {
31
- crv = cose_1.COSECRV.P256;
27
+ if (namedCurve === deps_js_1.id_secp256r1) {
28
+ crv = cose_js_1.COSECRV.P256;
32
29
  }
33
- else if (namedCurve === asn1_ecc_1.id_secp384r1) {
34
- crv = cose_1.COSECRV.P384;
30
+ else if (namedCurve === deps_js_1.id_secp384r1) {
31
+ crv = cose_js_1.COSECRV.P384;
35
32
  }
36
33
  else {
37
34
  throw new Error(`Certificate public key contained unexpected namedCurve ${namedCurve} (EC2)`);
@@ -43,30 +40,30 @@ function convertX509PublicKeyToCOSE(x509Certificate) {
43
40
  // Public key is in "uncompressed form", so we can split the remaining bytes in half
44
41
  let pointer = 1;
45
42
  const halfLength = (subjectPublicKey.length - 1) / 2;
46
- x = subjectPublicKey.slice(pointer, (pointer += halfLength));
43
+ x = subjectPublicKey.slice(pointer, pointer += halfLength);
47
44
  y = subjectPublicKey.slice(pointer);
48
45
  }
49
46
  else {
50
47
  throw new Error('TODO: Figure out how to handle public keys in "compressed form"');
51
48
  }
52
49
  const coseEC2PubKey = new Map();
53
- coseEC2PubKey.set(cose_1.COSEKEYS.kty, cose_1.COSEKTY.EC2);
54
- coseEC2PubKey.set(cose_1.COSEKEYS.alg, (0, mapX509SignatureAlgToCOSEAlg_1.mapX509SignatureAlgToCOSEAlg)(signatureAlgorithm));
55
- coseEC2PubKey.set(cose_1.COSEKEYS.crv, crv);
56
- coseEC2PubKey.set(cose_1.COSEKEYS.x, x);
57
- coseEC2PubKey.set(cose_1.COSEKEYS.y, y);
50
+ coseEC2PubKey.set(cose_js_1.COSEKEYS.kty, cose_js_1.COSEKTY.EC2);
51
+ coseEC2PubKey.set(cose_js_1.COSEKEYS.alg, (0, mapX509SignatureAlgToCOSEAlg_js_1.mapX509SignatureAlgToCOSEAlg)(signatureAlgorithm));
52
+ coseEC2PubKey.set(cose_js_1.COSEKEYS.crv, crv);
53
+ coseEC2PubKey.set(cose_js_1.COSEKEYS.x, x);
54
+ coseEC2PubKey.set(cose_js_1.COSEKEYS.y, y);
58
55
  cosePublicKey = coseEC2PubKey;
59
56
  }
60
57
  else if (publicKeyAlgorithmID === '1.2.840.113549.1.1.1') {
61
58
  /**
62
59
  * RSA public key
63
60
  */
64
- const rsaPublicKey = asn1_schema_1.AsnParser.parse(subjectPublicKeyInfo.subjectPublicKey, asn1_rsa_1.RSAPublicKey);
61
+ const rsaPublicKey = deps_js_1.AsnParser.parse(subjectPublicKeyInfo.subjectPublicKey, deps_js_1.RSAPublicKey);
65
62
  const coseRSAPubKey = new Map();
66
- coseRSAPubKey.set(cose_1.COSEKEYS.kty, cose_1.COSEKTY.RSA);
67
- coseRSAPubKey.set(cose_1.COSEKEYS.alg, (0, mapX509SignatureAlgToCOSEAlg_1.mapX509SignatureAlgToCOSEAlg)(signatureAlgorithm));
68
- coseRSAPubKey.set(cose_1.COSEKEYS.n, new Uint8Array(rsaPublicKey.modulus));
69
- coseRSAPubKey.set(cose_1.COSEKEYS.e, new Uint8Array(rsaPublicKey.publicExponent));
63
+ coseRSAPubKey.set(cose_js_1.COSEKEYS.kty, cose_js_1.COSEKTY.RSA);
64
+ coseRSAPubKey.set(cose_js_1.COSEKEYS.alg, (0, mapX509SignatureAlgToCOSEAlg_js_1.mapX509SignatureAlgToCOSEAlg)(signatureAlgorithm));
65
+ coseRSAPubKey.set(cose_js_1.COSEKEYS.n, new Uint8Array(rsaPublicKey.modulus));
66
+ coseRSAPubKey.set(cose_js_1.COSEKEYS.e, new Uint8Array(rsaPublicKey.publicExponent));
70
67
  cosePublicKey = coseRSAPubKey;
71
68
  }
72
69
  else {
@@ -75,4 +72,3 @@ function convertX509PublicKeyToCOSE(x509Certificate) {
75
72
  return cosePublicKey;
76
73
  }
77
74
  exports.convertX509PublicKeyToCOSE = convertX509PublicKeyToCOSE;
78
- //# sourceMappingURL=convertX509PublicKeyToCOSE.js.map
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Fundamental values that are needed to discern the more specific COSE public key types below.
3
+ *
4
+ * The use of `Maps` here is due to CBOR encoding being used with public keys, and the CBOR "Map"
5
+ * type is being decoded to JavaScript's `Map` type instead of, say, a basic Object as us JS
6
+ * developers might prefer.
7
+ *
8
+ * These types are an unorthodox way of saying "these Maps should involve these discrete lists of
9
+ * keys", but it works.
10
+ */
11
+ export type COSEPublicKey = {
12
+ get(key: COSEKEYS.kty): COSEKTY | undefined;
13
+ get(key: COSEKEYS.alg): COSEALG | undefined;
14
+ set(key: COSEKEYS.kty, value: COSEKTY): void;
15
+ set(key: COSEKEYS.alg, value: COSEALG): void;
16
+ };
17
+ export type COSEPublicKeyOKP = COSEPublicKey & {
18
+ get(key: COSEKEYS.crv): number | undefined;
19
+ get(key: COSEKEYS.x): Uint8Array | undefined;
20
+ set(key: COSEKEYS.crv, value: number): void;
21
+ set(key: COSEKEYS.x, value: Uint8Array): void;
22
+ };
23
+ export type COSEPublicKeyEC2 = COSEPublicKey & {
24
+ get(key: COSEKEYS.crv): number | undefined;
25
+ get(key: COSEKEYS.x): Uint8Array | undefined;
26
+ get(key: COSEKEYS.y): Uint8Array | undefined;
27
+ set(key: COSEKEYS.crv, value: number): void;
28
+ set(key: COSEKEYS.x, value: Uint8Array): void;
29
+ set(key: COSEKEYS.y, value: Uint8Array): void;
30
+ };
31
+ export type COSEPublicKeyRSA = COSEPublicKey & {
32
+ get(key: COSEKEYS.n): Uint8Array | undefined;
33
+ get(key: COSEKEYS.e): Uint8Array | undefined;
34
+ set(key: COSEKEYS.n, value: Uint8Array): void;
35
+ set(key: COSEKEYS.e, value: Uint8Array): void;
36
+ };
37
+ export declare function isCOSEPublicKeyOKP(cosePublicKey: COSEPublicKey): cosePublicKey is COSEPublicKeyOKP;
38
+ export declare function isCOSEPublicKeyEC2(cosePublicKey: COSEPublicKey): cosePublicKey is COSEPublicKeyEC2;
39
+ export declare function isCOSEPublicKeyRSA(cosePublicKey: COSEPublicKey): cosePublicKey is COSEPublicKeyRSA;
40
+ /**
41
+ * COSE Keys
42
+ *
43
+ * https://www.iana.org/assignments/cose/cose.xhtml#key-common-parameters
44
+ * https://www.iana.org/assignments/cose/cose.xhtml#key-type-parameters
45
+ */
46
+ export declare enum COSEKEYS {
47
+ kty = 1,
48
+ alg = 3,
49
+ crv = -1,
50
+ x = -2,
51
+ y = -3,
52
+ n = -1,
53
+ e = -2
54
+ }
55
+ /**
56
+ * COSE Key Types
57
+ *
58
+ * https://www.iana.org/assignments/cose/cose.xhtml#key-type
59
+ */
60
+ export declare enum COSEKTY {
61
+ OKP = 1,
62
+ EC2 = 2,
63
+ RSA = 3
64
+ }
65
+ export declare function isCOSEKty(kty: number | undefined): kty is COSEKTY;
66
+ /**
67
+ * COSE Curves
68
+ *
69
+ * https://www.iana.org/assignments/cose/cose.xhtml#elliptic-curves
70
+ */
71
+ export declare enum COSECRV {
72
+ P256 = 1,
73
+ P384 = 2,
74
+ P521 = 3,
75
+ ED25519 = 6,
76
+ SECP256K1 = 8
77
+ }
78
+ export declare function isCOSECrv(crv: number | undefined): crv is COSECRV;
79
+ /**
80
+ * COSE Algorithms
81
+ *
82
+ * https://www.iana.org/assignments/cose/cose.xhtml#algorithms
83
+ */
84
+ export declare enum COSEALG {
85
+ ES256 = -7,
86
+ EdDSA = -8,
87
+ ES384 = -35,
88
+ ES512 = -36,
89
+ PS256 = -37,
90
+ PS384 = -38,
91
+ PS512 = -39,
92
+ ES256K = -47,
93
+ RS256 = -257,
94
+ RS384 = -258,
95
+ RS512 = -259,
96
+ RS1 = -65535
97
+ }
98
+ export declare function isCOSEAlg(alg: number | undefined): alg is COSEALG;
@@ -58,6 +58,7 @@ var COSECRV;
58
58
  COSECRV[COSECRV["P384"] = 2] = "P384";
59
59
  COSECRV[COSECRV["P521"] = 3] = "P521";
60
60
  COSECRV[COSECRV["ED25519"] = 6] = "ED25519";
61
+ COSECRV[COSECRV["SECP256K1"] = 8] = "SECP256K1";
61
62
  })(COSECRV = exports.COSECRV || (exports.COSECRV = {}));
62
63
  function isCOSECrv(crv) {
63
64
  return Object.values(COSECRV).indexOf(crv) >= 0;
@@ -87,4 +88,3 @@ function isCOSEAlg(alg) {
87
88
  return Object.values(COSEALG).indexOf(alg) >= 0;
88
89
  }
89
90
  exports.isCOSEAlg = isCOSEAlg;
90
- //# sourceMappingURL=cose.js.map
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Convert an AttestationObject buffer to a proper object
3
+ *
4
+ * @param base64AttestationObject Attestation Object buffer
5
+ */
6
+ export declare function decodeAttestationObject(attestationObject: Uint8Array): AttestationObject;
7
+ export type AttestationFormat = 'fido-u2f' | 'packed' | 'android-safetynet' | 'android-key' | 'tpm' | 'apple' | 'none';
8
+ export type AttestationObject = {
9
+ get(key: 'fmt'): AttestationFormat;
10
+ get(key: 'attStmt'): AttestationStatement;
11
+ get(key: 'authData'): Uint8Array;
12
+ };
13
+ /**
14
+ * `AttestationStatement` will be an instance of `Map`, but these keys help make finite the list of
15
+ * possible values within it.
16
+ */
17
+ export type AttestationStatement = {
18
+ get(key: 'sig'): Uint8Array | undefined;
19
+ get(key: 'x5c'): Uint8Array[] | undefined;
20
+ get(key: 'response'): Uint8Array | undefined;
21
+ get(key: 'alg'): number | undefined;
22
+ get(key: 'ver'): string | undefined;
23
+ get(key: 'certInfo'): Uint8Array | undefined;
24
+ get(key: 'pubArea'): Uint8Array | undefined;
25
+ readonly size: number;
26
+ };
27
+ export declare const _decodeAttestationObjectInternals: {
28
+ stubThis: (value: AttestationObject) => AttestationObject;
29
+ };
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports._decodeAttestationObjectInternals = exports.decodeAttestationObject = void 0;
4
+ const index_js_1 = require("./iso/index.js");
5
+ /**
6
+ * Convert an AttestationObject buffer to a proper object
7
+ *
8
+ * @param base64AttestationObject Attestation Object buffer
9
+ */
10
+ function decodeAttestationObject(attestationObject) {
11
+ return exports._decodeAttestationObjectInternals.stubThis(index_js_1.isoCBOR.decodeFirst(attestationObject));
12
+ }
13
+ exports.decodeAttestationObject = decodeAttestationObject;
14
+ // Make it possible to stub the return value during testing
15
+ exports._decodeAttestationObjectInternals = {
16
+ stubThis: (value) => value,
17
+ };
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Convert authenticator extension data buffer to a proper object
3
+ *
4
+ * @param extensionData Authenticator Extension Data buffer
5
+ */
6
+ export declare function decodeAuthenticatorExtensions(extensionData: Uint8Array): AuthenticationExtensionsAuthenticatorOutputs | undefined;
7
+ export type AuthenticationExtensionsAuthenticatorOutputs = {
8
+ devicePubKey?: DevicePublicKeyAuthenticatorOutput;
9
+ uvm?: UVMAuthenticatorOutput;
10
+ };
11
+ export type DevicePublicKeyAuthenticatorOutput = {
12
+ dpk?: Uint8Array;
13
+ sig?: string;
14
+ nonce?: Uint8Array;
15
+ scope?: Uint8Array;
16
+ aaguid?: Uint8Array;
17
+ };
18
+ export type UVMAuthenticatorOutput = {
19
+ uvm?: Uint8Array[];
20
+ };
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.decodeAuthenticatorExtensions = void 0;
4
- const iso_1 = require("./iso");
4
+ const index_js_1 = require("./iso/index.js");
5
5
  /**
6
6
  * Convert authenticator extension data buffer to a proper object
7
7
  *
@@ -10,7 +10,7 @@ const iso_1 = require("./iso");
10
10
  function decodeAuthenticatorExtensions(extensionData) {
11
11
  let toCBOR;
12
12
  try {
13
- toCBOR = iso_1.isoCBOR.decodeFirst(extensionData);
13
+ toCBOR = index_js_1.isoCBOR.decodeFirst(extensionData);
14
14
  }
15
15
  catch (err) {
16
16
  const _err = err;
@@ -36,4 +36,3 @@ function convertMapToObjectDeep(input) {
36
36
  }
37
37
  return mapped;
38
38
  }
39
- //# sourceMappingURL=decodeAuthenticatorExtensions.js.map