U2f.php 126 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <link rel="dns-prefetch" href="https://github.githubassets.com">
  6. <link rel="dns-prefetch" href="https://avatars0.githubusercontent.com">
  7. <link rel="dns-prefetch" href="https://avatars1.githubusercontent.com">
  8. <link rel="dns-prefetch" href="https://avatars2.githubusercontent.com">
  9. <link rel="dns-prefetch" href="https://avatars3.githubusercontent.com">
  10. <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com">
  11. <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/">
  12. <link crossorigin="anonymous" media="all" integrity="sha512-BSy+E+S5PJuDWKcXiIXBoFJ7uJ+88y6hFdIhZpf7nf9MVNVvnJDPUaotaxFUQi8UXCLJOcGv1uifxVMc9o5DYQ==" rel="stylesheet" href="https://github.githubassets.com/assets/frameworks-052cbe13e4b93c9b8358a7178885c1a0.css" />
  13. <link crossorigin="anonymous" media="all" integrity="sha512-tuayzhY7bkBEq/qU4J930ofI//FEC8Na42y8grGUvaSDLLvJi8/hbKbZ7zxph9o0cZecDALcD+Ks9ppE9YmS5w==" rel="stylesheet" href="https://github.githubassets.com/assets/site-b6e6b2ce163b6e4044abfa94e09f77d2.css" />
  14. <link crossorigin="anonymous" media="all" integrity="sha512-zZEYWrT2WyrAqN2Nm29ttIz36AXxSxE+Mf4ARvtJCQrVVOFpnh0nRYu5fbAjtXXTRBDytc8BGLPA7sCsjvGQLw==" rel="stylesheet" href="https://github.githubassets.com/assets/github-cd91185ab4f65b2ac0a8dd8d9b6f6db4.css" />
  15. <script crossorigin="anonymous" defer="defer" integrity="sha512-8K2vvwbW+6H27Nad5ydg8PA2/aMD/LKq+EiK9s0U0hhVZxCI2tWBsYk9beAtisRw2j+Or5k2/F+6dk02nmj/PA==" type="application/javascript" src="https://github.githubassets.com/assets/environment-f0adafbf.js"></script>
  16. <script crossorigin="anonymous" defer="defer" integrity="sha512-bf3k8Y60Hljk6JoJikJwUktgpWsNM3NEnNgmlScAD6u57WAUEgCSZh5BsU5ls8YxsL8cZUaKGHC5fsf143pfaw==" type="application/javascript" src="https://github.githubassets.com/assets/chunk-frameworks-6dfde4f1.js"></script>
  17. <script crossorigin="anonymous" defer="defer" integrity="sha512-TZfq2T+XE31Mcp17bGlABjjeQ/69IH2f/sBvS31c4Jua0e1O/NE+aVbQtItMM2GFlmeEm13p/zyyWGIx10jVKQ==" type="application/javascript" src="https://github.githubassets.com/assets/chunk-vendor-4d97ead9.js"></script>
  18. <script crossorigin="anonymous" defer="defer" integrity="sha512-gkZCpFyYrX7ycwoeUW7Wyk7sg8OBhVVIA5gFuJfzX3jZcu1jiTPWWM749XEjX9pILro9F5+l+WUfz/MUpAwI0w==" type="application/javascript" src="https://github.githubassets.com/assets/behaviors-824642a4.js"></script>
  19. <script crossorigin="anonymous" defer="defer" integrity="sha512-F/8sNCLF603gJL0egQeZwFTYP9dfZAVEWHdjMssZ2opLZXRK08vgowBRzKyra6u9zU/rGVxe+igfJsSWzfO2lg==" type="application/javascript" data-module-id="./chunk-contributions-spider-graph.js" data-src="https://github.githubassets.com/assets/chunk-contributions-spider-graph-17ff2c34.js"></script>
  20. <script crossorigin="anonymous" defer="defer" integrity="sha512-obMR8mPKx8OvqRe34LgnUcxeJ1qujiA4ND3H6UX13ExMlA/WfHLjEzXRmgGRcRvN/8J1nzc+Z+jgz/PLTFy6zg==" type="application/javascript" data-module-id="./chunk-drag-drop.js" data-src="https://github.githubassets.com/assets/chunk-drag-drop-a1b311f2.js"></script>
  21. <script crossorigin="anonymous" defer="defer" integrity="sha512-AVtc/43rg+h7XgMPOa+baO1Fj+uiMUrLHd16U6+c6Tk7atk70Ux4IcGRPOHqMv422QIJD7l7BhG2PL4G/tUVKg==" type="application/javascript" data-module-id="./chunk-jump-to.js" data-src="https://github.githubassets.com/assets/chunk-jump-to-015b5cff.js"></script>
  22. <script crossorigin="anonymous" defer="defer" integrity="sha512-biWH4OAQPiDiTkaeyDnXf6hHF3u3Mv3eaDEvt8AdT/QvWDpLbnusALT4ZO+f+DgYp07UiHxNRAB6/J7IwPW6TQ==" type="application/javascript" data-module-id="./chunk-lib.dev.js" data-src="https://github.githubassets.com/assets/chunk-lib.dev-6e2587e0.js"></script>
  23. <script crossorigin="anonymous" defer="defer" integrity="sha512-tcH4xCRuMBAh1PruDaiwGnRIbHlF6bGLhxyCQ16uqok1cV5QFMguVPWJtN9KI0jGQOgN+Pha3+uOUXhXdfK/qw==" type="application/javascript" data-module-id="./chunk-profile-pins-element.js" data-src="https://github.githubassets.com/assets/chunk-profile-pins-element-b5c1f8c4.js"></script>
  24. <script crossorigin="anonymous" defer="defer" integrity="sha512-E+H+wAtjiqutBvn2cnXzDIvmasIhYiS7i7JzOfFUwo+Ej8zT54OrJtP//RhwixnypgOpCF4JvqzYy6zOtORDmg==" type="application/javascript" data-module-id="./chunk-runner-groups.js" data-src="https://github.githubassets.com/assets/chunk-runner-groups-13e1fec0.js"></script>
  25. <script crossorigin="anonymous" defer="defer" integrity="sha512-rIWotuwsYxV+jXNuevOVsulW2zsw98Gi4j7KXrJZq+bWFV86Y/R75+1jMjt5k1MPgabdTPpWPI/IoESZhah9ng==" type="application/javascript" data-module-id="./chunk-sortable-behavior.js" data-src="https://github.githubassets.com/assets/chunk-sortable-behavior-ac85a8b6.js"></script>
  26. <script crossorigin="anonymous" defer="defer" integrity="sha512-ZBICwPA18KYIgHbafqdjnTkxoCSNf/39rTlupkrtdpIWizECoux0ROzjAgyAx20Bf27VfshuBqrYwDqOVftyag==" type="application/javascript" data-module-id="./chunk-tweetsodium.js" data-src="https://github.githubassets.com/assets/chunk-tweetsodium-641202c0.js"></script>
  27. <script crossorigin="anonymous" defer="defer" integrity="sha512-QUtHMb3mxbE2DQSQZb9+tK8ZC2m05FFqZOa5ju2Sj0GdiQV+ce/bnIK/YwoMdty44NEhEIkZUIyh9DqLMsRedg==" type="application/javascript" data-module-id="./chunk-user-status-submit.js" data-src="https://github.githubassets.com/assets/chunk-user-status-submit-414b4731.js"></script>
  28. <script crossorigin="anonymous" defer="defer" integrity="sha512-B+TgAy+wlZmUjsDcWKt55BrTpxxZDolcD9v47x25Ue46lVb9c0n1tRz+BjjSeC4CuN9M3psDUpBhsr1aFKpFCw==" type="application/javascript" src="https://github.githubassets.com/assets/repositories-07e4e003.js"></script>
  29. <script crossorigin="anonymous" defer="defer" integrity="sha512-Dl4JXoI2igFuQLn6MCPPgiS7TVx3c0/G8iaIZCNzgGi4Iwg8TC0y4LPT584yJ+r6ZsF5QIFL9uo+nhHdBvfLNQ==" type="application/javascript" src="https://github.githubassets.com/assets/diffs-0e5e095e.js"></script>
  30. <meta name="viewport" content="width=device-width">
  31. <title>WebAuthn/U2f.php at master · lbuchs/WebAuthn · GitHub</title>
  32. <meta name="description" content="A simple PHP WebAuthn (FIDO2) server library. Contribute to lbuchs/WebAuthn development by creating an account on GitHub.">
  33. <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub">
  34. <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub">
  35. <meta property="fb:app_id" content="1401488693436528">
  36. <meta name="apple-itunes-app" content="app-id=1477376905" />
  37. <meta name="twitter:image:src" content="https://avatars1.githubusercontent.com/u/37619779?s=400&amp;v=4" /><meta name="twitter:site" content="@github" /><meta name="twitter:card" content="summary" /><meta name="twitter:title" content="lbuchs/WebAuthn" /><meta name="twitter:description" content="A simple PHP WebAuthn (FIDO2) server library. Contribute to lbuchs/WebAuthn development by creating an account on GitHub." />
  38. <meta property="og:image" content="https://avatars1.githubusercontent.com/u/37619779?s=400&amp;v=4" /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="lbuchs/WebAuthn" /><meta property="og:url" content="https://github.com/lbuchs/WebAuthn" /><meta property="og:description" content="A simple PHP WebAuthn (FIDO2) server library. Contribute to lbuchs/WebAuthn development by creating an account on GitHub." />
  39. <link rel="assets" href="https://github.githubassets.com/">
  40. <meta name="request-id" content="9E92:4939:66CE6B4:927EDD8:5FF2E997" data-pjax-transient="true"/><meta name="html-safe-nonce" content="7542a9b892db023c2b9745385a8d153039033cedf47b1573318c1c5f43430e1a" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI5RTkyOjQ5Mzk6NjZDRTZCNDo5MjdFREQ4OjVGRjJFOTk3IiwidmlzaXRvcl9pZCI6IjE1NTE1NTUxMzM0MDM0OTA3MTEiLCJyZWdpb25fZWRnZSI6ImZyYSIsInJlZ2lvbl9yZW5kZXIiOiJmcmEifQ==" data-pjax-transient="true"/><meta name="visitor-hmac" content="d552c3c83a273d68ee0537231b5365a51683433d08c4275be5df83b0c7f39fa6" data-pjax-transient="true"/>
  41. <meta name="hovercard-subject-tag" content="repository:149437753" data-pjax-transient>
  42. <meta name="github-keyboard-shortcuts" content="repository,source-code" data-pjax-transient="true" />
  43. <meta name="selected-link" value="repo_source" data-pjax-transient>
  44. <meta name="google-site-verification" content="c1kuD-K2HIVF635lypcsWPoD4kilo5-jA_wBFyT4uMY">
  45. <meta name="google-site-verification" content="KT5gs8h0wvaagLKAVWq8bbeNwnZZK1r1XQysX3xurLU">
  46. <meta name="google-site-verification" content="ZzhVyEFwb7w3e0-uOTltm8Jsck2F5StVihD0exw2fsA">
  47. <meta name="google-site-verification" content="GXs5KoUUkNCoaAZn7wPN-t01Pywp9M3sEjnt_3_ZWPc">
  48. <meta name="octolytics-host" content="collector.githubapp.com" /><meta name="octolytics-app-id" content="github" /><meta name="octolytics-event-url" content="https://collector.githubapp.com/github-external/browser_event" />
  49. <meta name="analytics-location" content="/&lt;user-name&gt;/&lt;repo-name&gt;/blob/show" data-pjax-transient="true" />
  50. <meta name="optimizely-datafile" content="{&quot;version&quot;: &quot;4&quot;, &quot;rollouts&quot;: [], &quot;typedAudiences&quot;: [], &quot;anonymizeIP&quot;: true, &quot;projectId&quot;: &quot;16737760170&quot;, &quot;variables&quot;: [], &quot;featureFlags&quot;: [], &quot;experiments&quot;: [{&quot;status&quot;: &quot;Running&quot;, &quot;audienceIds&quot;: [], &quot;variations&quot;: [{&quot;variables&quot;: [], &quot;id&quot;: &quot;19512260014&quot;, &quot;key&quot;: &quot;separate_plans_and_usage&quot;}, {&quot;variables&quot;: [], &quot;id&quot;: &quot;19509770036&quot;, &quot;key&quot;: &quot;control&quot;}], &quot;id&quot;: &quot;19536000020&quot;, &quot;key&quot;: &quot;account_billing_plans_and_usage&quot;, &quot;layerId&quot;: &quot;19545220022&quot;, &quot;trafficAllocation&quot;: [{&quot;entityId&quot;: &quot;19509770036&quot;, &quot;endOfRange&quot;: 2500}, {&quot;entityId&quot;: &quot;&quot;, &quot;endOfRange&quot;: 5000}, {&quot;entityId&quot;: &quot;19512260014&quot;, &quot;endOfRange&quot;: 7500}, {&quot;entityId&quot;: &quot;&quot;, &quot;endOfRange&quot;: 10000}], &quot;forcedVariations&quot;: {&quot;1238720267648ea2c88a74b410aa3c5c&quot;: &quot;separate_plans_and_usage&quot;}}], &quot;audiences&quot;: [{&quot;conditions&quot;: &quot;[\&quot;or\&quot;, {\&quot;match\&quot;: \&quot;exact\&quot;, \&quot;name\&quot;: \&quot;$opt_dummy_attribute\&quot;, \&quot;type\&quot;: \&quot;custom_attribute\&quot;, \&quot;value\&quot;: \&quot;$opt_dummy_value\&quot;}]&quot;, &quot;id&quot;: &quot;$opt_dummy_audience&quot;, &quot;name&quot;: &quot;Optimizely-Generated Audience for Backwards Compatibility&quot;}], &quot;groups&quot;: [], &quot;attributes&quot;: [{&quot;id&quot;: &quot;16822470375&quot;, &quot;key&quot;: &quot;user_id&quot;}, {&quot;id&quot;: &quot;17143601254&quot;, &quot;key&quot;: &quot;spammy&quot;}, {&quot;id&quot;: &quot;18175660309&quot;, &quot;key&quot;: &quot;organization_plan&quot;}, {&quot;id&quot;: &quot;18813001570&quot;, &quot;key&quot;: &quot;is_logged_in&quot;}, {&quot;id&quot;: &quot;19073851829&quot;, &quot;key&quot;: &quot;geo&quot;}], &quot;botFiltering&quot;: false, &quot;accountId&quot;: &quot;16737760170&quot;, &quot;events&quot;: [{&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;17911811441&quot;, &quot;key&quot;: &quot;hydro_click.dashboard.teacher_toolbox_cta&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18124116703&quot;, &quot;key&quot;: &quot;submit.organizations.complete_sign_up&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18145892387&quot;, &quot;key&quot;: &quot;no_metric.tracked_outside_of_optimizely&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18178755568&quot;, &quot;key&quot;: &quot;click.org_onboarding_checklist.add_repo&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18180553241&quot;, &quot;key&quot;: &quot;submit.repository_imports.create&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18186103728&quot;, &quot;key&quot;: &quot;click.help.learn_more_about_repository_creation&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18188530140&quot;, &quot;key&quot;: &quot;test_event.do_not_use_in_production&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18191963644&quot;, &quot;key&quot;: &quot;click.empty_org_repo_cta.transfer_repository&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18195612788&quot;, &quot;key&quot;: &quot;click.empty_org_repo_cta.import_repository&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18210945499&quot;, &quot;key&quot;: &quot;click.org_onboarding_checklist.invite_members&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18211063248&quot;, &quot;key&quot;: &quot;click.empty_org_repo_cta.create_repository&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18215721889&quot;, &quot;key&quot;: &quot;click.org_onboarding_checklist.update_profile&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18224360785&quot;, &quot;key&quot;: &quot;click.org_onboarding_checklist.dismiss&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18234832286&quot;, &quot;key&quot;: &quot;submit.organization_activation.complete&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18252392383&quot;, &quot;key&quot;: &quot;submit.org_repository.create&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18257551537&quot;, &quot;key&quot;: &quot;submit.org_member_invitation.create&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18259522260&quot;, &quot;key&quot;: &quot;submit.organization_profile.update&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18564603625&quot;, &quot;key&quot;: &quot;view.classroom_select_organization&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18568612016&quot;, &quot;key&quot;: &quot;click.classroom_sign_in_click&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18572592540&quot;, &quot;key&quot;: &quot;view.classroom_name&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18574203855&quot;, &quot;key&quot;: &quot;click.classroom_create_organization&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18582053415&quot;, &quot;key&quot;: &quot;click.classroom_select_organization&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18589463420&quot;, &quot;key&quot;: &quot;click.classroom_create_classroom&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18591323364&quot;, &quot;key&quot;: &quot;click.classroom_create_first_classroom&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18591652321&quot;, &quot;key&quot;: &quot;click.classroom_grant_access&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18607131425&quot;, &quot;key&quot;: &quot;view.classroom_creation&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;18831680583&quot;, &quot;key&quot;: &quot;upgrade_account_plan&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19064064515&quot;, &quot;key&quot;: &quot;click.signup&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19075373687&quot;, &quot;key&quot;: &quot;click.view_account_billing_page&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19077355841&quot;, &quot;key&quot;: &quot;click.dismiss_signup_prompt&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19079713938&quot;, &quot;key&quot;: &quot;click.contact_sales&quot;}, {&quot;experimentIds&quot;: [&quot;19536000020&quot;], &quot;id&quot;: &quot;19120963070&quot;, &quot;key&quot;: &quot;click.compare_account_plans&quot;}, {&quot;experimentIds&quot;: [&quot;19536000020&quot;], &quot;id&quot;: &quot;19151690317&quot;, &quot;key&quot;: &quot;click.upgrade_account_cta&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19424193129&quot;, &quot;key&quot;: &quot;click.open_account_switcher&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19520330825&quot;, &quot;key&quot;: &quot;click.visit_account_profile&quot;}, {&quot;experimentIds&quot;: [], &quot;id&quot;: &quot;19540970635&quot;, &quot;key&quot;: &quot;click.switch_account_context&quot;}], &quot;revision&quot;: &quot;380&quot;}" />
  51. <!-- To prevent page flashing, the optimizely JS needs to be loaded in the
  52. <head> tag before the DOM renders -->
  53. <script crossorigin="anonymous" defer="defer" integrity="sha512-VJrqSK702Mzl9EQxm2OvFxKaumGptgVdeJS2rsaLvVlOdR4HEu3ZFjtV83kMKdYRelUnxxaAFw0wthkpdEUafw==" type="application/javascript" src="https://github.githubassets.com/assets/optimizely-549aea48.js"></script>
  54. <meta name="hostname" content="github.com">
  55. <meta name="user-login" content="">
  56. <meta name="expected-hostname" content="github.com">
  57. <meta name="enabled-features" content="MARKETPLACE_PENDING_INSTALLATIONS,ACTIONS_ENVIRONMENTS,ACTIONS_ENVIRONMENTS">
  58. <meta http-equiv="x-pjax-version" content="b9519ee0f1a36ea318a50dfe223f5168c887f949c28be1eb4abf8a9c37367fa6">
  59. <link href="https://github.com/lbuchs/WebAuthn/commits/master.atom" rel="alternate" title="Recent Commits to WebAuthn:master" type="application/atom+xml">
  60. <meta name="go-import" content="github.com/lbuchs/WebAuthn git https://github.com/lbuchs/WebAuthn.git">
  61. <meta name="octolytics-dimension-user_id" content="37619779" /><meta name="octolytics-dimension-user_login" content="lbuchs" /><meta name="octolytics-dimension-repository_id" content="149437753" /><meta name="octolytics-dimension-repository_nwo" content="lbuchs/WebAuthn" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="false" /><meta name="octolytics-dimension-repository_network_root_id" content="149437753" /><meta name="octolytics-dimension-repository_network_root_nwo" content="lbuchs/WebAuthn" /><meta name="octolytics-dimension-repository_explore_github_marketplace_ci_cta_shown" content="false" />
  62. <link rel="canonical" href="https://github.com/lbuchs/WebAuthn/blob/master/src/Attestation/Format/U2f.php" data-pjax-transient>
  63. <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats">
  64. <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors">
  65. <meta name="browser-optimizely-client-errors-url" content="https://api.github.com/_private/browser/optimizely_client/errors">
  66. <link rel="mask-icon" href="https://github.githubassets.com/pinned-octocat.svg" color="#000000">
  67. <link rel="alternate icon" class="js-site-favicon" type="image/png" href="https://github.githubassets.com/favicons/favicon.png">
  68. <link rel="icon" class="js-site-favicon" type="image/svg+xml" href="https://github.githubassets.com/favicons/favicon.svg">
  69. <meta name="theme-color" content="#1e2327">
  70. <meta name="color-scheme" content="light dark">
  71. <link rel="manifest" href="/manifest.json" crossOrigin="use-credentials">
  72. </head>
  73. <body class="logged-out env-production page-responsive page-blob">
  74. <div class="position-relative js-header-wrapper ">
  75. <a href="#start-of-content" class="px-2 py-4 bg-blue text-white show-on-focus js-skip-to-content">Skip to content</a>
  76. <span class="progress-pjax-loader width-full js-pjax-loader-bar Progress position-fixed">
  77. <span style="background-color: #79b8ff;width: 0%;" class="Progress-item progress-pjax-loader-bar "></span>
  78. </span>
  79. <header class="Header-old header-logged-out js-details-container Details position-relative f4 py-2" role="banner">
  80. <div class="container-xl d-lg-flex flex-items-center p-responsive">
  81. <div class="d-flex flex-justify-between flex-items-center">
  82. <a class="mr-4" href="https://github.com/" aria-label="Homepage" data-ga-click="(Logged out) Header, go to homepage, icon:logo-wordmark">
  83. <svg height="32" class="octicon octicon-mark-github text-white" viewBox="0 0 16 16" version="1.1" width="32" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path></svg>
  84. </a>
  85. <div class="d-lg-none css-truncate css-truncate-target width-fit p-2">
  86. </div>
  87. <div class="d-flex flex-items-center">
  88. <a href="/join?ref_cta=Sign+up&amp;ref_loc=header+logged+out&amp;ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow&amp;source=header-repo"
  89. class="d-inline-block d-lg-none f5 text-white no-underline border border-gray-dark rounded-2 px-2 py-1 mr-3 mr-sm-5"
  90. data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/lbuchs/WebAuthn/blob/master/src/Attestation/Format/U2f.php&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="1fa73645d79e7339fa56f9c3fdc149417fb1e8add226b07afc3dee86ae9c1d63"
  91. data-ga-click="Sign up, click to sign up for account, ref_page:/&lt;user-name&gt;/&lt;repo-name&gt;/blob/show;ref_cta:Sign up;ref_loc:header logged out">
  92. Sign&nbsp;up
  93. </a>
  94. <button class="btn-link d-lg-none mt-1 js-details-target" type="button" aria-label="Toggle navigation" aria-expanded="false">
  95. <svg height="24" class="octicon octicon-three-bars text-white" viewBox="0 0 16 16" version="1.1" width="24" aria-hidden="true"><path fill-rule="evenodd" d="M1 2.75A.75.75 0 011.75 2h12.5a.75.75 0 110 1.5H1.75A.75.75 0 011 2.75zm0 5A.75.75 0 011.75 7h12.5a.75.75 0 110 1.5H1.75A.75.75 0 011 7.75zM1.75 12a.75.75 0 100 1.5h12.5a.75.75 0 100-1.5H1.75z"></path></svg>
  96. </button>
  97. </div>
  98. </div>
  99. <div class="HeaderMenu HeaderMenu--logged-out position-fixed top-0 right-0 bottom-0 height-fit position-lg-relative d-lg-flex flex-justify-between flex-items-center flex-auto">
  100. <div class="d-flex d-lg-none flex-justify-end border-bottom bg-gray-light p-3">
  101. <button class="btn-link js-details-target" type="button" aria-label="Toggle navigation" aria-expanded="false">
  102. <svg height="24" class="octicon octicon-x text-gray" viewBox="0 0 24 24" version="1.1" width="24" aria-hidden="true"><path fill-rule="evenodd" d="M5.72 5.72a.75.75 0 011.06 0L12 10.94l5.22-5.22a.75.75 0 111.06 1.06L13.06 12l5.22 5.22a.75.75 0 11-1.06 1.06L12 13.06l-5.22 5.22a.75.75 0 01-1.06-1.06L10.94 12 5.72 6.78a.75.75 0 010-1.06z"></path></svg>
  103. </button>
  104. </div>
  105. <nav class="mt-0 px-3 px-lg-0 mb-5 mb-lg-0" aria-label="Global">
  106. <ul class="d-lg-flex list-style-none">
  107. <li class="d-block d-lg-flex flex-lg-nowrap flex-lg-items-center border-bottom border-lg-bottom-0 mr-0 mr-lg-3 edge-item-fix position-relative flex-wrap flex-justify-between d-flex flex-items-center ">
  108. <details class="HeaderMenu-details details-overlay details-reset width-full">
  109. <summary class="HeaderMenu-summary HeaderMenu-link px-0 py-3 border-0 no-wrap d-block d-lg-inline-block">
  110. Why GitHub?
  111. <svg x="0px" y="0px" viewBox="0 0 14 8" xml:space="preserve" fill="none" class="icon-chevon-down-mktg position-absolute position-lg-relative">
  112. <path d="M1,1l6.2,6L13,1"></path>
  113. </svg>
  114. </summary>
  115. <div class="dropdown-menu flex-auto rounded-1 bg-white px-0 mt-0 pb-4 p-lg-4 position-relative position-lg-absolute left-0 left-lg-n4">
  116. <a href="/features" class="py-2 lh-condensed-ultra d-block link-gray-dark no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Features">Features <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a>
  117. <ul class="list-style-none f5 pb-3">
  118. <li class="edge-item-fix"><a href="/features/code-review/" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Code review">Code review</a></li>
  119. <li class="edge-item-fix"><a href="/features/project-management/" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Project management">Project management</a></li>
  120. <li class="edge-item-fix"><a href="/features/integrations" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Integrations">Integrations</a></li>
  121. <li class="edge-item-fix"><a href="/features/actions" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Actions">Actions</a></li>
  122. <li class="edge-item-fix"><a href="/features/packages" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to GitHub Packages">Packages</a></li>
  123. <li class="edge-item-fix"><a href="/features/security" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Security">Security</a></li>
  124. <li class="edge-item-fix"><a href="/features#team-management" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Team management">Team management</a></li>
  125. <li class="edge-item-fix"><a href="/features#hosting" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Code hosting">Hosting</a></li>
  126. <li class="edge-item-fix hide-xl"><a href="/mobile" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Mobile">Mobile</a></li>
  127. </ul>
  128. <ul class="list-style-none mb-0 border-lg-top pt-lg-3">
  129. <li class="edge-item-fix"><a href="/customer-stories" class="py-2 lh-condensed-ultra d-block no-underline link-gray-dark no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Customer stories">Customer stories <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a></li>
  130. <li class="edge-item-fix"><a href="/security" class="py-2 lh-condensed-ultra d-block no-underline link-gray-dark no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Security">Security <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a></li>
  131. </ul>
  132. </div>
  133. </details>
  134. </li>
  135. <li class="border-bottom border-lg-bottom-0 mr-0 mr-lg-3">
  136. <a href="/team" class="HeaderMenu-link no-underline py-3 d-block d-lg-inline-block" data-ga-click="(Logged out) Header, go to Team">Team</a>
  137. </li>
  138. <li class="border-bottom border-lg-bottom-0 mr-0 mr-lg-3">
  139. <a href="/enterprise" class="HeaderMenu-link no-underline py-3 d-block d-lg-inline-block" data-ga-click="(Logged out) Header, go to Enterprise">Enterprise</a>
  140. </li>
  141. <li class="d-block d-lg-flex flex-lg-nowrap flex-lg-items-center border-bottom border-lg-bottom-0 mr-0 mr-lg-3 edge-item-fix position-relative flex-wrap flex-justify-between d-flex flex-items-center ">
  142. <details class="HeaderMenu-details details-overlay details-reset width-full">
  143. <summary class="HeaderMenu-summary HeaderMenu-link px-0 py-3 border-0 no-wrap d-block d-lg-inline-block">
  144. Explore
  145. <svg x="0px" y="0px" viewBox="0 0 14 8" xml:space="preserve" fill="none" class="icon-chevon-down-mktg position-absolute position-lg-relative">
  146. <path d="M1,1l6.2,6L13,1"></path>
  147. </svg>
  148. </summary>
  149. <div class="dropdown-menu flex-auto rounded-1 bg-white px-0 pt-2 pb-0 mt-0 pb-4 p-lg-4 position-relative position-lg-absolute left-0 left-lg-n4">
  150. <ul class="list-style-none mb-3">
  151. <li class="edge-item-fix"><a href="/explore" class="py-2 lh-condensed-ultra d-block link-gray-dark no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Explore">Explore GitHub <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a></li>
  152. </ul>
  153. <h4 class="text-gray-light text-normal text-mono f5 mb-2 border-lg-top pt-lg-3">Learn &amp; contribute</h4>
  154. <ul class="list-style-none mb-3">
  155. <li class="edge-item-fix"><a href="/topics" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Topics">Topics</a></li>
  156. <li class="edge-item-fix"><a href="/collections" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Collections">Collections</a></li>
  157. <li class="edge-item-fix"><a href="/trending" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Trending">Trending</a></li>
  158. <li class="edge-item-fix"><a href="https://lab.github.com/" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Learning lab">Learning Lab</a></li>
  159. <li class="edge-item-fix"><a href="https://opensource.guide" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Open source guides">Open source guides</a></li>
  160. </ul>
  161. <h4 class="text-gray-light text-normal text-mono f5 mb-2 border-lg-top pt-lg-3">Connect with others</h4>
  162. <ul class="list-style-none mb-0">
  163. <li class="edge-item-fix"><a href="https://github.com/events" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Events">Events</a></li>
  164. <li class="edge-item-fix"><a href="https://github.community" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Community forum">Community forum</a></li>
  165. <li class="edge-item-fix"><a href="https://education.github.com" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to GitHub Education">GitHub Education</a></li>
  166. <li class="edge-item-fix"><a href="https://stars.github.com" class="py-2 pb-0 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to GitHub Stars Program">GitHub Stars program</a></li>
  167. </ul>
  168. </div>
  169. </details>
  170. </li>
  171. <li class="border-bottom border-lg-bottom-0 mr-0 mr-lg-3">
  172. <a href="/marketplace" class="HeaderMenu-link no-underline py-3 d-block d-lg-inline-block" data-ga-click="(Logged out) Header, go to Marketplace">Marketplace</a>
  173. </li>
  174. <li class="d-block d-lg-flex flex-lg-nowrap flex-lg-items-center border-bottom border-lg-bottom-0 mr-0 mr-lg-3 edge-item-fix position-relative flex-wrap flex-justify-between d-flex flex-items-center ">
  175. <details class="HeaderMenu-details details-overlay details-reset width-full">
  176. <summary class="HeaderMenu-summary HeaderMenu-link px-0 py-3 border-0 no-wrap d-block d-lg-inline-block">
  177. Pricing
  178. <svg x="0px" y="0px" viewBox="0 0 14 8" xml:space="preserve" fill="none" class="icon-chevon-down-mktg position-absolute position-lg-relative">
  179. <path d="M1,1l6.2,6L13,1"></path>
  180. </svg>
  181. </summary>
  182. <div class="dropdown-menu flex-auto rounded-1 bg-white px-0 pt-2 pb-4 mt-0 p-lg-4 position-relative position-lg-absolute left-0 left-lg-n4">
  183. <a href="/pricing" class="pb-2 lh-condensed-ultra d-block link-gray-dark no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Pricing">Plans <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a>
  184. <ul class="list-style-none mb-3">
  185. <li class="edge-item-fix"><a href="/pricing#feature-comparison" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Compare plans">Compare plans</a></li>
  186. <li class="edge-item-fix"><a href="https://enterprise.github.com/contact" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Contact Sales">Contact Sales</a></li>
  187. </ul>
  188. <ul class="list-style-none mb-0 border-lg-top pt-lg-3">
  189. <li class="edge-item-fix"><a href="/nonprofit" class="py-2 lh-condensed-ultra d-block no-underline link-gray-dark no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Nonprofits">Nonprofit <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a></li>
  190. <li class="edge-item-fix"><a href="https://education.github.com" class="py-2 pb-0 lh-condensed-ultra d-block no-underline link-gray-dark no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Education">Education <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a></li>
  191. </ul>
  192. </div>
  193. </details>
  194. </li>
  195. </ul>
  196. </nav>
  197. <div class="d-lg-flex flex-items-center px-3 px-lg-0 text-center text-lg-left">
  198. <div class="d-lg-flex mb-3 mb-lg-0">
  199. <div class="header-search flex-auto js-site-search position-relative flex-self-stretch flex-md-self-auto mb-3 mb-md-0 mr-0 mr-md-3 scoped-search site-scoped-search js-jump-to"
  200. role="combobox"
  201. aria-owns="jump-to-results"
  202. aria-label="Search or jump to"
  203. aria-haspopup="listbox"
  204. aria-expanded="false"
  205. >
  206. <div class="position-relative">
  207. <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="js-site-search-form" role="search" aria-label="Site" data-flagged-in="false" data-scope-type="Repository" data-scope-id="149437753" data-scoped-search-url="/lbuchs/WebAuthn/search" data-owner-scoped-search-url="/users/lbuchs/search" data-unscoped-search-url="/search" action="/lbuchs/WebAuthn/search" accept-charset="UTF-8" method="get">
  208. <label class="form-control input-sm header-search-wrapper p-0 js-chromeless-input-container header-search-wrapper-jump-to position-relative d-flex flex-justify-between flex-items-center">
  209. <input type="text"
  210. class="form-control input-sm header-search-input jump-to-field js-jump-to-field js-site-search-focus js-site-search-field is-clearable"
  211. data-hotkey="s,/"
  212. name="q"
  213. value=""
  214. placeholder="Search"
  215. data-unscoped-placeholder="Search GitHub"
  216. data-scoped-placeholder="Search"
  217. autocapitalize="off"
  218. aria-autocomplete="list"
  219. aria-controls="jump-to-results"
  220. aria-label="Search"
  221. data-jump-to-suggestions-path="/_graphql/GetSuggestedNavigationDestinations"
  222. spellcheck="false"
  223. autocomplete="off"
  224. >
  225. <input type="hidden" data-csrf="true" class="js-data-jump-to-suggestions-path-csrf" value="zUjaiZOouHy7sVPjvd6AoASla0iHuBSr0e3yU0K5eRH4kPloSavD1Kkyv/CvwhwcB5ZV/96AkuUeozlrZh2nYQ==" />
  226. <input type="hidden" class="js-site-search-type-field" name="type" >
  227. <img src="https://github.githubassets.com/images/search-key-slash.svg" alt="" class="mr-2 header-search-key-slash">
  228. <div class="Box position-absolute overflow-hidden d-none jump-to-suggestions js-jump-to-suggestions-container">
  229. <ul class="d-none js-jump-to-suggestions-template-container">
  230. <li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-suggestion" role="option">
  231. <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="" data-item-type="suggestion">
  232. <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none">
  233. <svg height="16" width="16" class="octicon octicon-repo flex-shrink-0 js-jump-to-octicon-repo d-none" title="Repository" aria-label="Repository" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path></svg>
  234. <svg height="16" width="16" class="octicon octicon-project flex-shrink-0 js-jump-to-octicon-project d-none" title="Project" aria-label="Project" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M1.75 0A1.75 1.75 0 000 1.75v12.5C0 15.216.784 16 1.75 16h12.5A1.75 1.75 0 0016 14.25V1.75A1.75 1.75 0 0014.25 0H1.75zM1.5 1.75a.25.25 0 01.25-.25h12.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25V1.75zM11.75 3a.75.75 0 00-.75.75v7.5a.75.75 0 001.5 0v-7.5a.75.75 0 00-.75-.75zm-8.25.75a.75.75 0 011.5 0v5.5a.75.75 0 01-1.5 0v-5.5zM8 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 3z"></path></svg>
  235. <svg height="16" width="16" class="octicon octicon-search flex-shrink-0 js-jump-to-octicon-search d-none" title="Search" aria-label="Search" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path></svg>
  236. </div>
  237. <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28">
  238. <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target">
  239. </div>
  240. <div class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none js-jump-to-badge-search">
  241. <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this repository">
  242. In this repository
  243. </span>
  244. <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub">
  245. All GitHub
  246. </span>
  247. <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span>
  248. </div>
  249. <div aria-hidden="true" class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump">
  250. Jump to
  251. <span class="d-inline-block ml-1 v-align-middle">↵</span>
  252. </div>
  253. </a>
  254. </li>
  255. </ul>
  256. <ul class="d-none js-jump-to-no-results-template-container">
  257. <li class="d-flex flex-justify-center flex-items-center f5 d-none js-jump-to-suggestion p-2">
  258. <span class="text-gray">No suggested jump to results</span>
  259. </li>
  260. </ul>
  261. <ul id="jump-to-results" role="listbox" class="p-0 m-0 js-navigation-container jump-to-suggestions-results-container js-jump-to-suggestions-results-container">
  262. <li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-scoped-search d-none" role="option">
  263. <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="" data-item-type="scoped_search">
  264. <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none">
  265. <svg height="16" width="16" class="octicon octicon-repo flex-shrink-0 js-jump-to-octicon-repo d-none" title="Repository" aria-label="Repository" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path></svg>
  266. <svg height="16" width="16" class="octicon octicon-project flex-shrink-0 js-jump-to-octicon-project d-none" title="Project" aria-label="Project" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M1.75 0A1.75 1.75 0 000 1.75v12.5C0 15.216.784 16 1.75 16h12.5A1.75 1.75 0 0016 14.25V1.75A1.75 1.75 0 0014.25 0H1.75zM1.5 1.75a.25.25 0 01.25-.25h12.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25V1.75zM11.75 3a.75.75 0 00-.75.75v7.5a.75.75 0 001.5 0v-7.5a.75.75 0 00-.75-.75zm-8.25.75a.75.75 0 011.5 0v5.5a.75.75 0 01-1.5 0v-5.5zM8 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 3z"></path></svg>
  267. <svg height="16" width="16" class="octicon octicon-search flex-shrink-0 js-jump-to-octicon-search d-none" title="Search" aria-label="Search" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path></svg>
  268. </div>
  269. <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28">
  270. <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target">
  271. </div>
  272. <div class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none js-jump-to-badge-search">
  273. <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this repository">
  274. In this repository
  275. </span>
  276. <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub">
  277. All GitHub
  278. </span>
  279. <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span>
  280. </div>
  281. <div aria-hidden="true" class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump">
  282. Jump to
  283. <span class="d-inline-block ml-1 v-align-middle">↵</span>
  284. </div>
  285. </a>
  286. </li>
  287. <li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-global-search d-none" role="option">
  288. <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="" data-item-type="global_search">
  289. <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none">
  290. <svg height="16" width="16" class="octicon octicon-repo flex-shrink-0 js-jump-to-octicon-repo d-none" title="Repository" aria-label="Repository" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path></svg>
  291. <svg height="16" width="16" class="octicon octicon-project flex-shrink-0 js-jump-to-octicon-project d-none" title="Project" aria-label="Project" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M1.75 0A1.75 1.75 0 000 1.75v12.5C0 15.216.784 16 1.75 16h12.5A1.75 1.75 0 0016 14.25V1.75A1.75 1.75 0 0014.25 0H1.75zM1.5 1.75a.25.25 0 01.25-.25h12.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25V1.75zM11.75 3a.75.75 0 00-.75.75v7.5a.75.75 0 001.5 0v-7.5a.75.75 0 00-.75-.75zm-8.25.75a.75.75 0 011.5 0v5.5a.75.75 0 01-1.5 0v-5.5zM8 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 3z"></path></svg>
  292. <svg height="16" width="16" class="octicon octicon-search flex-shrink-0 js-jump-to-octicon-search d-none" title="Search" aria-label="Search" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path></svg>
  293. </div>
  294. <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28">
  295. <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target">
  296. </div>
  297. <div class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none js-jump-to-badge-search">
  298. <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this repository">
  299. In this repository
  300. </span>
  301. <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub">
  302. All GitHub
  303. </span>
  304. <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span>
  305. </div>
  306. <div aria-hidden="true" class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump">
  307. Jump to
  308. <span class="d-inline-block ml-1 v-align-middle">↵</span>
  309. </div>
  310. </a>
  311. </li>
  312. </ul>
  313. </div>
  314. </label>
  315. </form> </div>
  316. </div>
  317. </div>
  318. <a href="/login?return_to=%2Flbuchs%2FWebAuthn%2Fblob%2Fmaster%2Fsrc%2FAttestation%2FFormat%2FU2f.php"
  319. class="HeaderMenu-link no-underline mr-3"
  320. data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/lbuchs/WebAuthn/blob/master/src/Attestation/Format/U2f.php&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="3cfd2894fb0d052d292731382a8442c1bef5d120299c4c1adcfef7574f6d3214"
  321. data-ga-click="(Logged out) Header, clicked Sign in, text:sign-in">
  322. Sign&nbsp;in
  323. </a>
  324. <a href="/join?ref_cta=Sign+up&amp;ref_loc=header+logged+out&amp;ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow&amp;source=header-repo&amp;source_repo=lbuchs%2FWebAuthn"
  325. class="HeaderMenu-link d-inline-block no-underline border border-gray-dark rounded-1 px-2 py-1"
  326. data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/lbuchs/WebAuthn/blob/master/src/Attestation/Format/U2f.php&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="3cfd2894fb0d052d292731382a8442c1bef5d120299c4c1adcfef7574f6d3214"
  327. data-ga-click="Sign up, click to sign up for account, ref_page:/&lt;user-name&gt;/&lt;repo-name&gt;/blob/show;ref_cta:Sign up;ref_loc:header logged out">
  328. Sign&nbsp;up
  329. </a>
  330. </div>
  331. </div>
  332. </div>
  333. </header>
  334. </div>
  335. <div id="start-of-content" class="show-on-focus"></div>
  336. <div data-pjax-replace id="js-flash-container">
  337. <template class="js-flash-template">
  338. <div class="flash flash-full {{ className }}">
  339. <div class=" px-2" >
  340. <button class="flash-close js-flash-close" type="button" aria-label="Dismiss this message">
  341. <svg class="octicon octicon-x" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path></svg>
  342. </button>
  343. <div>{{ message }}</div>
  344. </div>
  345. </div>
  346. </template>
  347. </div>
  348. <include-fragment class="js-notification-shelf-include-fragment" data-base-src="https://github.com/notifications/beta/shelf"></include-fragment>
  349. <div
  350. class="application-main "
  351. data-commit-hovercards-enabled
  352. data-discussion-hovercards-enabled
  353. data-issue-and-pr-hovercards-enabled
  354. >
  355. <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class="">
  356. <main id="js-repo-pjax-container" data-pjax-container >
  357. <div class="bg-gray-light pt-3 hide-full-screen mb-5">
  358. <div class="d-flex mb-3 px-3 px-md-4 px-lg-5">
  359. <div class="flex-auto min-width-0 width-fit mr-3">
  360. <h1 class=" d-flex flex-wrap flex-items-center break-word f3 text-normal">
  361. <svg class="octicon octicon-repo text-gray mr-2" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path></svg>
  362. <span class="author flex-self-stretch" itemprop="author">
  363. <a class="url fn" rel="author" data-hovercard-type="user" data-hovercard-url="/users/lbuchs/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/lbuchs">lbuchs</a>
  364. </span>
  365. <span class="mx-1 flex-self-stretch color-text-secondary">/</span>
  366. <strong itemprop="name" class="mr-2 flex-self-stretch">
  367. <a data-pjax="#js-repo-pjax-container" class="" href="/lbuchs/WebAuthn">WebAuthn</a>
  368. </strong>
  369. </h1>
  370. </div>
  371. <ul class="pagehead-actions flex-shrink-0 d-none d-md-inline" style="padding: 2px 0;">
  372. <li>
  373. <a class="tooltipped tooltipped-s btn btn-sm btn-with-count" aria-label="You must be signed in to watch a repository" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;notification subscription menu watch&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/lbuchs/WebAuthn/blob/master/src/Attestation/Format/U2f.php&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="598d5928985ed1f030381dfc3bb71ab863948ce6a1e9bd0b182df6eaf085d392" href="/login?return_to=%2Flbuchs%2FWebAuthn">
  374. <svg class="octicon octicon-eye" height="16" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M1.679 7.932c.412-.621 1.242-1.75 2.366-2.717C5.175 4.242 6.527 3.5 8 3.5c1.473 0 2.824.742 3.955 1.715 1.124.967 1.954 2.096 2.366 2.717a.119.119 0 010 .136c-.412.621-1.242 1.75-2.366 2.717C10.825 11.758 9.473 12.5 8 12.5c-1.473 0-2.824-.742-3.955-1.715C2.92 9.818 2.09 8.69 1.679 8.068a.119.119 0 010-.136zM8 2c-1.981 0-3.67.992-4.933 2.078C1.797 5.169.88 6.423.43 7.1a1.619 1.619 0 000 1.798c.45.678 1.367 1.932 2.637 3.024C4.329 13.008 6.019 14 8 14c1.981 0 3.67-.992 4.933-2.078 1.27-1.091 2.187-2.345 2.637-3.023a1.619 1.619 0 000-1.798c-.45-.678-1.367-1.932-2.637-3.023C11.671 2.992 9.981 2 8 2zm0 8a2 2 0 100-4 2 2 0 000 4z"></path></svg>
  375. Watch
  376. </a> <a class="social-count" href="/lbuchs/WebAuthn/watchers"
  377. aria-label="19 users are watching this repository">
  378. 19
  379. </a>
  380. </li>
  381. <li>
  382. <a class="btn btn-sm btn-with-count tooltipped tooltipped-s" aria-label="You must be signed in to star a repository" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;star button&quot;,&quot;repository_id&quot;:149437753,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/lbuchs/WebAuthn/blob/master/src/Attestation/Format/U2f.php&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="a7420bb34426895414d50cee42729e8f317b98fd52602d3e35eb79262f2d0d1e" href="/login?return_to=%2Flbuchs%2FWebAuthn">
  383. <svg class="octicon octicon-star v-align-text-bottom mr-1" height="16" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25zm0 2.445L6.615 5.5a.75.75 0 01-.564.41l-3.097.45 2.24 2.184a.75.75 0 01.216.664l-.528 3.084 2.769-1.456a.75.75 0 01.698 0l2.77 1.456-.53-3.084a.75.75 0 01.216-.664l2.24-2.183-3.096-.45a.75.75 0 01-.564-.41L8 2.694v.001z"></path></svg>
  384. <span>
  385. Star
  386. </span></a>
  387. <a class="social-count js-social-count" href="/lbuchs/WebAuthn/stargazers"
  388. aria-label="85 users starred this repository">
  389. 85
  390. </a>
  391. </li>
  392. <li>
  393. <a class="btn btn-sm btn-with-count tooltipped tooltipped-s" aria-label="You must be signed in to fork a repository" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;repo details fork button&quot;,&quot;repository_id&quot;:149437753,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/lbuchs/WebAuthn/blob/master/src/Attestation/Format/U2f.php&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="9c144c74f6c62b1b64fba74b857324d9e810ba028560e6ec736bf01ed5ded1f4" href="/login?return_to=%2Flbuchs%2FWebAuthn">
  394. <svg class="octicon octicon-repo-forked" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M5 3.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm0 2.122a2.25 2.25 0 10-1.5 0v.878A2.25 2.25 0 005.75 8.5h1.5v2.128a2.251 2.251 0 101.5 0V8.5h1.5a2.25 2.25 0 002.25-2.25v-.878a2.25 2.25 0 10-1.5 0v.878a.75.75 0 01-.75.75h-4.5A.75.75 0 015 6.25v-.878zm3.75 7.378a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm3-8.75a.75.75 0 100-1.5.75.75 0 000 1.5z"></path></svg>
  395. Fork
  396. </a>
  397. <a href="/lbuchs/WebAuthn/network/members" class="social-count"
  398. aria-label="19 users forked this repository">
  399. 19
  400. </a>
  401. </li>
  402. </ul>
  403. </div>
  404. <nav aria-label="Repository" data-pjax="#js-repo-pjax-container" class="js-repo-nav js-sidenav-container-pjax js-responsive-underlinenav overflow-hidden UnderlineNav px-3 px-md-4 px-lg-5 bg-gray-light">
  405. <ul class="UnderlineNav-body list-style-none ">
  406. <li class="d-flex">
  407. <a class="js-selected-navigation-item selected UnderlineNav-item hx_underlinenav-item no-wrap js-responsive-underlinenav-item" data-tab-item="i0code-tab" data-hotkey="g c" data-ga-click="Repository, Navigation click, Code tab" aria-current="page" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages repo_deployments /lbuchs/WebAuthn" href="/lbuchs/WebAuthn">
  408. <svg class="octicon octicon-code UnderlineNav-octicon d-none d-sm-inline" height="16" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M4.72 3.22a.75.75 0 011.06 1.06L2.06 8l3.72 3.72a.75.75 0 11-1.06 1.06L.47 8.53a.75.75 0 010-1.06l4.25-4.25zm6.56 0a.75.75 0 10-1.06 1.06L13.94 8l-3.72 3.72a.75.75 0 101.06 1.06l4.25-4.25a.75.75 0 000-1.06l-4.25-4.25z"></path></svg>
  409. <span data-content="Code">Code</span>
  410. <span title="Not available" class="Counter "></span>
  411. </a>
  412. </li>
  413. <li class="d-flex">
  414. <a class="js-selected-navigation-item UnderlineNav-item hx_underlinenav-item no-wrap js-responsive-underlinenav-item" data-tab-item="i1issues-tab" data-hotkey="g i" data-ga-click="Repository, Navigation click, Issues tab" data-selected-links="repo_issues repo_labels repo_milestones /lbuchs/WebAuthn/issues" href="/lbuchs/WebAuthn/issues">
  415. <svg class="octicon octicon-issue-opened UnderlineNav-octicon d-none d-sm-inline" height="16" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8zm9 3a1 1 0 11-2 0 1 1 0 012 0zm-.25-6.25a.75.75 0 00-1.5 0v3.5a.75.75 0 001.5 0v-3.5z"></path></svg>
  416. <span data-content="Issues">Issues</span>
  417. <span title="8" class="Counter ">8</span>
  418. </a>
  419. </li>
  420. <li class="d-flex">
  421. <a class="js-selected-navigation-item UnderlineNav-item hx_underlinenav-item no-wrap js-responsive-underlinenav-item" data-tab-item="i2pull-requests-tab" data-hotkey="g p" data-ga-click="Repository, Navigation click, Pull requests tab" data-selected-links="repo_pulls checks /lbuchs/WebAuthn/pulls" href="/lbuchs/WebAuthn/pulls">
  422. <svg class="octicon octicon-git-pull-request UnderlineNav-octicon d-none d-sm-inline" height="16" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.177 3.073L9.573.677A.25.25 0 0110 .854v4.792a.25.25 0 01-.427.177L7.177 3.427a.25.25 0 010-.354zM3.75 2.5a.75.75 0 100 1.5.75.75 0 000-1.5zm-2.25.75a2.25 2.25 0 113 2.122v5.256a2.251 2.251 0 11-1.5 0V5.372A2.25 2.25 0 011.5 3.25zM11 2.5h-1V4h1a1 1 0 011 1v5.628a2.251 2.251 0 101.5 0V5A2.5 2.5 0 0011 2.5zm1 10.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0zM3.75 12a.75.75 0 100 1.5.75.75 0 000-1.5z"></path></svg>
  423. <span data-content="Pull requests">Pull requests</span>
  424. <span title="0" hidden="hidden" class="Counter ">0</span>
  425. </a>
  426. </li>
  427. <li class="d-flex">
  428. <a class="js-selected-navigation-item UnderlineNav-item hx_underlinenav-item no-wrap js-responsive-underlinenav-item" data-tab-item="i3actions-tab" data-hotkey="g a" data-ga-click="Repository, Navigation click, Actions tab" data-selected-links="repo_actions /lbuchs/WebAuthn/actions" href="/lbuchs/WebAuthn/actions">
  429. <svg class="octicon octicon-play UnderlineNav-octicon d-none d-sm-inline" height="16" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0zM8 0a8 8 0 100 16A8 8 0 008 0zM6.379 5.227A.25.25 0 006 5.442v5.117a.25.25 0 00.379.214l4.264-2.559a.25.25 0 000-.428L6.379 5.227z"></path></svg>
  430. <span data-content="Actions">Actions</span>
  431. <span title="Not available" class="Counter "></span>
  432. </a>
  433. </li>
  434. <li class="d-flex">
  435. <a class="js-selected-navigation-item UnderlineNav-item hx_underlinenav-item no-wrap js-responsive-underlinenav-item" data-tab-item="i4projects-tab" data-hotkey="g b" data-ga-click="Repository, Navigation click, Projects tab" data-selected-links="repo_projects new_repo_project repo_project /lbuchs/WebAuthn/projects" href="/lbuchs/WebAuthn/projects">
  436. <svg class="octicon octicon-project UnderlineNav-octicon d-none d-sm-inline" height="16" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M1.75 0A1.75 1.75 0 000 1.75v12.5C0 15.216.784 16 1.75 16h12.5A1.75 1.75 0 0016 14.25V1.75A1.75 1.75 0 0014.25 0H1.75zM1.5 1.75a.25.25 0 01.25-.25h12.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25V1.75zM11.75 3a.75.75 0 00-.75.75v7.5a.75.75 0 001.5 0v-7.5a.75.75 0 00-.75-.75zm-8.25.75a.75.75 0 011.5 0v5.5a.75.75 0 01-1.5 0v-5.5zM8 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 3z"></path></svg>
  437. <span data-content="Projects">Projects</span>
  438. <span title="0" hidden="hidden" class="Counter ">0</span>
  439. </a>
  440. </li>
  441. <li class="d-flex">
  442. <a class="js-selected-navigation-item UnderlineNav-item hx_underlinenav-item no-wrap js-responsive-underlinenav-item" data-tab-item="i5security-tab" data-hotkey="g s" data-ga-click="Repository, Navigation click, Security tab" data-selected-links="security overview alerts policy token_scanning code_scanning /lbuchs/WebAuthn/security" href="/lbuchs/WebAuthn/security">
  443. <svg class="octicon octicon-shield UnderlineNav-octicon d-none d-sm-inline" height="16" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.467.133a1.75 1.75 0 011.066 0l5.25 1.68A1.75 1.75 0 0115 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.7 1.7 0 01-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 011.217-1.667l5.25-1.68zm.61 1.429a.25.25 0 00-.153 0l-5.25 1.68a.25.25 0 00-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.2.2 0 00.154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.25.25 0 00-.174-.237l-5.25-1.68zM9 10.5a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.75a.75.75 0 10-1.5 0v3a.75.75 0 001.5 0v-3z"></path></svg>
  444. <span data-content="Security">Security</span>
  445. <include-fragment src="/lbuchs/WebAuthn/security/overall-count" accept="text/fragment+html"></include-fragment>
  446. </a>
  447. </li>
  448. <li class="d-flex">
  449. <a class="js-selected-navigation-item UnderlineNav-item hx_underlinenav-item no-wrap js-responsive-underlinenav-item" data-tab-item="i6insights-tab" data-ga-click="Repository, Navigation click, Insights tab" data-selected-links="repo_graphs repo_contributors dependency_graph dependabot_updates pulse people /lbuchs/WebAuthn/pulse" href="/lbuchs/WebAuthn/pulse">
  450. <svg class="octicon octicon-graph UnderlineNav-octicon d-none d-sm-inline" height="16" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M1.5 1.75a.75.75 0 00-1.5 0v12.5c0 .414.336.75.75.75h14.5a.75.75 0 000-1.5H1.5V1.75zm14.28 2.53a.75.75 0 00-1.06-1.06L10 7.94 7.53 5.47a.75.75 0 00-1.06 0L3.22 8.72a.75.75 0 001.06 1.06L7 7.06l2.47 2.47a.75.75 0 001.06 0l5.25-5.25z"></path></svg>
  451. <span data-content="Insights">Insights</span>
  452. <span title="Not available" class="Counter "></span>
  453. </a>
  454. </li>
  455. </ul> <div class="position-absolute right-0 pr-3 pr-md-4 pr-lg-5 js-responsive-underlinenav-overflow" style="visibility:hidden;">
  456. <details class="details-overlay details-reset position-relative">
  457. <summary role="button">
  458. <div class="UnderlineNav-item mr-0 border-0">
  459. <svg class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path></svg>
  460. <span class="sr-only">More</span>
  461. </div>
  462. </summary> <div>
  463. <details-menu role="menu" class="dropdown-menu dropdown-menu-sw ">
  464. <ul>
  465. <li data-menu-item="i0code-tab" hidden>
  466. <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links=" /lbuchs/WebAuthn" href="/lbuchs/WebAuthn">
  467. Code
  468. </a> </li>
  469. <li data-menu-item="i1issues-tab" hidden>
  470. <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links=" /lbuchs/WebAuthn/issues" href="/lbuchs/WebAuthn/issues">
  471. Issues
  472. </a> </li>
  473. <li data-menu-item="i2pull-requests-tab" hidden>
  474. <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links=" /lbuchs/WebAuthn/pulls" href="/lbuchs/WebAuthn/pulls">
  475. Pull requests
  476. </a> </li>
  477. <li data-menu-item="i3actions-tab" hidden>
  478. <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links=" /lbuchs/WebAuthn/actions" href="/lbuchs/WebAuthn/actions">
  479. Actions
  480. </a> </li>
  481. <li data-menu-item="i4projects-tab" hidden>
  482. <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links=" /lbuchs/WebAuthn/projects" href="/lbuchs/WebAuthn/projects">
  483. Projects
  484. </a> </li>
  485. <li data-menu-item="i5security-tab" hidden>
  486. <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links=" /lbuchs/WebAuthn/security" href="/lbuchs/WebAuthn/security">
  487. Security
  488. </a> </li>
  489. <li data-menu-item="i6insights-tab" hidden>
  490. <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links=" /lbuchs/WebAuthn/pulse" href="/lbuchs/WebAuthn/pulse">
  491. Insights
  492. </a> </li>
  493. </ul>
  494. </details-menu>
  495. </div></details> </div>
  496. </nav>
  497. </div>
  498. <div class="container-xl clearfix new-discussion-timeline px-3 px-md-4 px-lg-5">
  499. <div class="repository-content " >
  500. <a class="d-none js-permalink-shortcut" data-hotkey="y" href="/lbuchs/WebAuthn/blob/e62a6615894daaf061f91bc274064c5773074f81/src/Attestation/Format/U2f.php">Permalink</a>
  501. <!-- blob contrib key: blob_contributors:v22:362c2f001e0a021defec58b1d88f2bcc162f20859abcd28e71ea63851dfca542 -->
  502. <div class="d-flex flex-items-start flex-shrink-0 pb-3 flex-wrap flex-md-nowrap flex-justify-between flex-md-justify-start">
  503. <div class="position-relative">
  504. <details class="details-reset details-overlay mr-0 mb-0 " id="branch-select-menu">
  505. <summary class="btn css-truncate"
  506. data-hotkey="w"
  507. title="Switch branches or tags">
  508. <svg class="octicon octicon-git-branch text-gray" height="16" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M11.75 2.5a.75.75 0 100 1.5.75.75 0 000-1.5zm-2.25.75a2.25 2.25 0 113 2.122V6A2.5 2.5 0 0110 8.5H6a1 1 0 00-1 1v1.128a2.251 2.251 0 11-1.5 0V5.372a2.25 2.25 0 111.5 0v1.836A2.492 2.492 0 016 7h4a1 1 0 001-1v-.628A2.25 2.25 0 019.5 3.25zM4.25 12a.75.75 0 100 1.5.75.75 0 000-1.5zM3.5 3.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0z"></path></svg>
  509. <span class="css-truncate-target" data-menu-button>master</span>
  510. <span class="dropdown-caret"></span>
  511. </summary>
  512. <details-menu class="SelectMenu SelectMenu--hasFilter" src="/lbuchs/WebAuthn/refs/master/src/Attestation/Format/U2f.php?source_action=show&amp;source_controller=blob" preload>
  513. <div class="SelectMenu-modal">
  514. <include-fragment class="SelectMenu-loading" aria-label="Menu is loading">
  515. <svg class="octicon octicon-octoface anim-pulse" height="32" viewBox="0 0 24 24" version="1.1" width="32" aria-hidden="true"><path d="M7.75 11c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 102.5 0v-1.5C9 11.56 8.44 11 7.75 11zm1.27 4.5a.469.469 0 01.48-.5h5a.47.47 0 01.48.5c-.116 1.316-.759 2.5-2.98 2.5s-2.864-1.184-2.98-2.5zm7.23-4.5c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 102.5 0v-1.5c0-.69-.56-1.25-1.25-1.25z"></path><path fill-rule="evenodd" d="M21.255 3.82a1.725 1.725 0 00-2.141-1.195c-.557.16-1.406.44-2.264.866-.78.386-1.647.93-2.293 1.677A18.442 18.442 0 0012 5c-.93 0-1.784.059-2.569.17-.645-.74-1.505-1.28-2.28-1.664a13.876 13.876 0 00-2.265-.866 1.725 1.725 0 00-2.141 1.196 23.645 23.645 0 00-.69 3.292c-.125.97-.191 2.07-.066 3.112C1.254 11.882 1 13.734 1 15.527 1 19.915 3.13 23 12 23c8.87 0 11-3.053 11-7.473 0-1.794-.255-3.647-.99-5.29.127-1.046.06-2.15-.066-3.125a23.652 23.652 0 00-.689-3.292zM20.5 14c.5 3.5-1.5 6.5-8.5 6.5s-9-3-8.5-6.5c.583-4 3-6 8.5-6s7.928 2 8.5 6z"></path></svg>
  516. </include-fragment>
  517. </div>
  518. </details-menu>
  519. </details>
  520. </div>
  521. <h2 id="blob-path" class="breadcrumb flex-auto min-width-0 text-normal mx-0 mx-md-3 width-full width-md-auto flex-order-1 flex-md-order-none mt-3 mt-md-0">
  522. <span class="js-repo-root text-bold"><span class="js-path-segment d-inline-block wb-break-all"><a data-pjax="true" href="/lbuchs/WebAuthn"><span>WebAuthn</span></a></span></span><span class="separator">/</span><span class="js-path-segment d-inline-block wb-break-all"><a data-pjax="true" href="/lbuchs/WebAuthn/tree/master/src"><span>src</span></a></span><span class="separator">/</span><span class="js-path-segment d-inline-block wb-break-all"><a data-pjax="true" href="/lbuchs/WebAuthn/tree/master/src/Attestation"><span>Attestation</span></a></span><span class="separator">/</span><span class="js-path-segment d-inline-block wb-break-all"><a data-pjax="true" href="/lbuchs/WebAuthn/tree/master/src/Attestation/Format"><span>Format</span></a></span><span class="separator">/</span><strong class="final-path">U2f.php</strong>
  523. <span class="separator">/</span><details class="details-reset details-overlay d-inline" id="jumpto-symbol-select-menu">
  524. <summary class="btn-link link-gray css-truncate" aria-haspopup="true" data-hotkey="r" data-hydro-click="{&quot;event_type&quot;:&quot;code_navigation.click_on_blob_definitions&quot;,&quot;payload&quot;:{&quot;action&quot;:&quot;click_on_blob_definitions&quot;,&quot;repository_id&quot;:149437753,&quot;ref&quot;:&quot;master&quot;,&quot;language&quot;:&quot;PHP&quot;,&quot;originating_url&quot;:&quot;https://github.com/lbuchs/WebAuthn/blob/master/src/Attestation/Format/U2f.php&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="ee69c967beb835fc4d88a91ec7718da59239a1c95613365bbff302162d0d1a1f">
  525. <svg class="octicon octicon-code" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M4.72 3.22a.75.75 0 011.06 1.06L2.06 8l3.72 3.72a.75.75 0 11-1.06 1.06L.47 8.53a.75.75 0 010-1.06l4.25-4.25zm6.56 0a.75.75 0 10-1.06 1.06L13.94 8l-3.72 3.72a.75.75 0 101.06 1.06l4.25-4.25a.75.75 0 000-1.06l-4.25-4.25z"></path></svg>
  526. <span data-menu-button>Jump to</span>
  527. <span class="dropdown-caret"></span>
  528. </summary>
  529. <details-menu class="SelectMenu SelectMenu--hasFilter" role="menu">
  530. <div class="SelectMenu-modal">
  531. <header class="SelectMenu-header">
  532. <span class="SelectMenu-title">Code definitions</span>
  533. <button class="SelectMenu-closeButton" type="button" data-toggle-for="jumpto-symbol-select-menu">
  534. <svg aria-label="Close menu" class="octicon octicon-x" viewBox="0 0 16 16" version="1.1" width="16" height="16" role="img"><path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path></svg>
  535. </button>
  536. </header>
  537. <div class="SelectMenu-filter">
  538. <input
  539. class="SelectMenu-input form-control js-filterable-field"
  540. id="jumpto-symbols-filter-field"
  541. type="text"
  542. autocomplete="off"
  543. spellcheck="false"
  544. autofocus
  545. placeholder="Filter definitions"
  546. aria-label="Filter definitions">
  547. </div>
  548. <div class="SelectMenu-list">
  549. <div data-filterable-for="jumpto-symbols-filter-field" data-filterable-type="substring">
  550. <a class="SelectMenu-item d-flex flex-justify-between css-truncate" role="menuitemradio" aria-checked="false" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;code_navigation.navigate_to_blob_definition&quot;,&quot;payload&quot;:{&quot;action&quot;:&quot;navigate_to_blob_definition&quot;,&quot;repository_id&quot;:149437753,&quot;ref&quot;:&quot;master&quot;,&quot;language&quot;:&quot;PHP&quot;,&quot;originating_url&quot;:&quot;https://github.com/lbuchs/WebAuthn/blob/master/src/Attestation/Format/U2f.php&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="09e4c2798380756490d8fe4e59d22d3ae7cb1c2ab57d684941467baf3ecbcc0e" href="/lbuchs/WebAuthn/blob/master/src/Attestation/Format/U2f.php#L9">
  551. <svg class="octicon octicon-check SelectMenu-icon SelectMenu-icon--check" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path></svg>
  552. <span class="flex-auto css-truncate-target" data-menu-button-text>U2f</span>
  553. <span class="flex-auto d-flex flex-justify-end">Class</span>
  554. </a> <a class="SelectMenu-item d-flex flex-justify-between css-truncate" role="menuitemradio" aria-checked="false" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;code_navigation.navigate_to_blob_definition&quot;,&quot;payload&quot;:{&quot;action&quot;:&quot;navigate_to_blob_definition&quot;,&quot;repository_id&quot;:149437753,&quot;ref&quot;:&quot;master&quot;,&quot;language&quot;:&quot;PHP&quot;,&quot;originating_url&quot;:&quot;https://github.com/lbuchs/WebAuthn/blob/master/src/Attestation/Format/U2f.php&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="09e4c2798380756490d8fe4e59d22d3ae7cb1c2ab57d684941467baf3ecbcc0e" href="/lbuchs/WebAuthn/blob/master/src/Attestation/Format/U2f.php#L14">
  555. <svg class="octicon octicon-check SelectMenu-icon SelectMenu-icon--check" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path></svg>
  556. <span class="flex-auto css-truncate-target" data-menu-button-text>__construct</span>
  557. <span class="flex-auto d-flex flex-justify-end">Function</span>
  558. </a> <a class="SelectMenu-item d-flex flex-justify-between css-truncate" role="menuitemradio" aria-checked="false" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;code_navigation.navigate_to_blob_definition&quot;,&quot;payload&quot;:{&quot;action&quot;:&quot;navigate_to_blob_definition&quot;,&quot;repository_id&quot;:149437753,&quot;ref&quot;:&quot;master&quot;,&quot;language&quot;:&quot;PHP&quot;,&quot;originating_url&quot;:&quot;https://github.com/lbuchs/WebAuthn/blob/master/src/Attestation/Format/U2f.php&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="09e4c2798380756490d8fe4e59d22d3ae7cb1c2ab57d684941467baf3ecbcc0e" href="/lbuchs/WebAuthn/blob/master/src/Attestation/Format/U2f.php#L45">
  559. <svg class="octicon octicon-check SelectMenu-icon SelectMenu-icon--check" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path></svg>
  560. <span class="flex-auto css-truncate-target" data-menu-button-text>getCertificatePem</span>
  561. <span class="flex-auto d-flex flex-justify-end">Function</span>
  562. </a> <a class="SelectMenu-item d-flex flex-justify-between css-truncate" role="menuitemradio" aria-checked="false" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;code_navigation.navigate_to_blob_definition&quot;,&quot;payload&quot;:{&quot;action&quot;:&quot;navigate_to_blob_definition&quot;,&quot;repository_id&quot;:149437753,&quot;ref&quot;:&quot;master&quot;,&quot;language&quot;:&quot;PHP&quot;,&quot;originating_url&quot;:&quot;https://github.com/lbuchs/WebAuthn/blob/master/src/Attestation/Format/U2f.php&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="09e4c2798380756490d8fe4e59d22d3ae7cb1c2ab57d684941467baf3ecbcc0e" href="/lbuchs/WebAuthn/blob/master/src/Attestation/Format/U2f.php#L55">
  563. <svg class="octicon octicon-check SelectMenu-icon SelectMenu-icon--check" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path></svg>
  564. <span class="flex-auto css-truncate-target" data-menu-button-text>validateAttestation</span>
  565. <span class="flex-auto d-flex flex-justify-end">Function</span>
  566. </a> <a class="SelectMenu-item d-flex flex-justify-between css-truncate" role="menuitemradio" aria-checked="false" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;code_navigation.navigate_to_blob_definition&quot;,&quot;payload&quot;:{&quot;action&quot;:&quot;navigate_to_blob_definition&quot;,&quot;repository_id&quot;:149437753,&quot;ref&quot;:&quot;master&quot;,&quot;language&quot;:&quot;PHP&quot;,&quot;originating_url&quot;:&quot;https://github.com/lbuchs/WebAuthn/blob/master/src/Attestation/Format/U2f.php&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="09e4c2798380756490d8fe4e59d22d3ae7cb1c2ab57d684941467baf3ecbcc0e" href="/lbuchs/WebAuthn/blob/master/src/Attestation/Format/U2f.php#L81">
  567. <svg class="octicon octicon-check SelectMenu-icon SelectMenu-icon--check" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path></svg>
  568. <span class="flex-auto css-truncate-target" data-menu-button-text>validateRootCertificate</span>
  569. <span class="flex-auto d-flex flex-justify-end">Function</span>
  570. </a> </div>
  571. </div>
  572. <footer class="SelectMenu-footer">
  573. <div class="d-flex flex-justify-between">
  574. Code navigation index up-to-date
  575. <svg class="octicon octicon-dot-fill text-green" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 4a4 4 0 100 8 4 4 0 000-8z"></path></svg>
  576. </div>
  577. </footer>
  578. </div>
  579. </details-menu>
  580. </details>
  581. </h2>
  582. <a href="/lbuchs/WebAuthn/find/master"
  583. class="js-pjax-capture-input btn mr-2 d-none d-md-block"
  584. data-pjax
  585. data-hotkey="t">
  586. Go to file
  587. </a>
  588. <details id="blob-more-options-details" class="details-overlay details-reset position-relative">
  589. <summary role="button" type="button" class="btn ">
  590. <svg aria-label="More options" class="octicon octicon-kebab-horizontal" height="16" viewBox="0 0 16 16" version="1.1" width="16" role="img"><path d="M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path></svg>
  591. </summary> <div>
  592. <ul class="dropdown-menu dropdown-menu-sw">
  593. <li class="d-block d-md-none">
  594. <a class="dropdown-item d-flex flex-items-baseline" data-hydro-click="{&quot;event_type&quot;:&quot;repository.click&quot;,&quot;payload&quot;:{&quot;target&quot;:&quot;FIND_FILE_BUTTON&quot;,&quot;repository_id&quot;:149437753,&quot;originating_url&quot;:&quot;https://github.com/lbuchs/WebAuthn/blob/master/src/Attestation/Format/U2f.php&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="584a2d97f3fc6b2c52184e8813afb9d4e785ab04da743d5288e40cf51f994efb" data-ga-click="Repository, find file, location:repo overview" data-hotkey="t" data-pjax="true" href="/lbuchs/WebAuthn/find/master">
  595. <span class="flex-auto">Go to file</span>
  596. <span class="text-small text-gray" aria-hidden="true">T</span>
  597. </a> </li>
  598. <li data-toggle-for="blob-more-options-details">
  599. <button type="button" data-toggle-for="jumpto-line-details-dialog" class="btn-link dropdown-item">
  600. <span class="d-flex flex-items-baseline">
  601. <span class="flex-auto">Go to line</span>
  602. <span class="text-small text-gray" aria-hidden="true">L</span>
  603. </span>
  604. </button>
  605. </li>
  606. <li data-toggle-for="blob-more-options-details">
  607. <button type="button" data-toggle-for="jumpto-symbol-select-menu" class="btn-link dropdown-item">
  608. <span class="d-flex flex-items-baseline">
  609. <span class="flex-auto">Go to definition</span>
  610. <span class="text-small text-gray" aria-hidden="true">R</span>
  611. </span>
  612. </button>
  613. </li>
  614. <li class="dropdown-divider" role="none"></li>
  615. <li>
  616. <clipboard-copy value="src/Attestation/Format/U2f.php" class="dropdown-item cursor-pointer" data-toggle-for="blob-more-options-details">
  617. Copy path
  618. </clipboard-copy>
  619. </li>
  620. </ul>
  621. </div></details> </div>
  622. <div class="Box d-flex flex-column flex-shrink-0 mb-3">
  623. <div class="Box-header Box-header--blue Details js-details-container">
  624. <div class="d-flex flex-items-center">
  625. <span class="flex-shrink-0 ml-n1 mr-n1 mt-n1 mb-n1">
  626. <a rel="author" data-skip-pjax="true" data-hovercard-type="user" data-hovercard-url="/users/lbuchs/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/lbuchs"><img class="avatar avatar-user" src="https://avatars3.githubusercontent.com/u/37619779?s=48&amp;v=4" width="24" height="24" alt="@lbuchs" /></a>
  627. </span>
  628. <div class="flex-1 d-flex flex-items-center ml-3 min-width-0">
  629. <div class="css-truncate css-truncate-overflow">
  630. <a class="text-bold link-gray-dark" rel="author" data-hovercard-type="user" data-hovercard-url="/users/lbuchs/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/lbuchs">lbuchs</a>
  631. <span>
  632. <a data-pjax="true" title="Bugfix u2f" class="link-gray" href="/lbuchs/WebAuthn/commit/e62a6615894daaf061f91bc274064c5773074f81">Bugfix u2f</a>
  633. </span>
  634. </div>
  635. <span class="ml-2">
  636. <include-fragment accept="text/fragment+html" src="/lbuchs/WebAuthn/commit/e62a6615894daaf061f91bc274064c5773074f81/rollup?direction=e" class="d-inline"></include-fragment>
  637. </span>
  638. </div>
  639. <div class="ml-3 d-flex flex-shrink-0 flex-items-center flex-justify-end text-gray no-wrap">
  640. <span class="d-none d-md-inline">
  641. <span>Latest commit</span>
  642. <a class="text-small text-mono link-gray" href="/lbuchs/WebAuthn/commit/e62a6615894daaf061f91bc274064c5773074f81" data-pjax>e62a661</a>
  643. <span itemprop="dateModified"><relative-time datetime="2021-01-04T09:21:11Z" class="no-wrap">Jan 4, 2021</relative-time></span>
  644. </span>
  645. <a data-pjax href="/lbuchs/WebAuthn/commits/e62a6615894daaf061f91bc274064c5773074f81/src/Attestation/Format/U2f.php" class="ml-3 no-wrap link-gray-dark no-underline">
  646. <svg class="octicon octicon-history text-gray" height="16" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M1.643 3.143L.427 1.927A.25.25 0 000 2.104V5.75c0 .138.112.25.25.25h3.646a.25.25 0 00.177-.427L2.715 4.215a6.5 6.5 0 11-1.18 4.458.75.75 0 10-1.493.154 8.001 8.001 0 101.6-5.684zM7.75 4a.75.75 0 01.75.75v2.992l2.028.812a.75.75 0 01-.557 1.392l-2.5-1A.75.75 0 017 8.25v-3.5A.75.75 0 017.75 4z"></path></svg>
  647. <span class="d-none d-sm-inline">
  648. <strong>History</strong>
  649. </span>
  650. </a>
  651. </div>
  652. </div>
  653. </div>
  654. <div class="Box-body d-flex flex-items-center flex-auto border-bottom-0 flex-wrap" >
  655. <details class="details-reset details-overlay details-overlay-dark lh-default text-gray-dark float-left mr-3" id="blob_contributors_box">
  656. <summary class="link-gray-dark">
  657. <svg class="octicon octicon-people text-gray" height="16" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M5.5 3.5a2 2 0 100 4 2 2 0 000-4zM2 5.5a3.5 3.5 0 115.898 2.549 5.507 5.507 0 013.034 4.084.75.75 0 11-1.482.235 4.001 4.001 0 00-7.9 0 .75.75 0 01-1.482-.236A5.507 5.507 0 013.102 8.05 3.49 3.49 0 012 5.5zM11 4a.75.75 0 100 1.5 1.5 1.5 0 01.666 2.844.75.75 0 00-.416.672v.352a.75.75 0 00.574.73c1.2.289 2.162 1.2 2.522 2.372a.75.75 0 101.434-.44 5.01 5.01 0 00-2.56-3.012A3 3 0 0011 4z"></path></svg>
  658. <strong>2</strong>
  659. contributors
  660. </summary>
  661. <details-dialog
  662. class="Box Box--overlay d-flex flex-column anim-fade-in fast"
  663. aria-label="Users who have contributed to this file"
  664. src="/lbuchs/WebAuthn/contributors-list/e62a6615894daaf061f91bc274064c5773074f81/src/Attestation/Format/U2f.php" preload>
  665. <div class="Box-header">
  666. <button class="Box-btn-octicon btn-octicon float-right" type="button" aria-label="Close dialog" data-close-dialog>
  667. <svg class="octicon octicon-x" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path></svg>
  668. </button>
  669. <h3 class="Box-title">
  670. Users who have contributed to this file
  671. </h3>
  672. </div>
  673. <include-fragment>
  674. <svg viewBox="0 0 16 16" fill="none" style="box-sizing: content-box; color: var(--color-icon-primary);" class="my-3 mx-auto d-block" width="32" height="32">
  675. <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" />
  676. <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke">
  677. <animateTransform attributeName="transform" type="rotate" from="0 8 8" to="360 8 8" dur="1s" repeatCount="indefinite" />
  678. </path>
  679. </svg>
  680. </include-fragment>
  681. </details-dialog>
  682. </details>
  683. <span class="">
  684. <a class="avatar-link" data-hovercard-type="user" data-hovercard-url="/users/lbuchs/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/lbuchs/WebAuthn/commits/e62a6615894daaf061f91bc274064c5773074f81/src/Attestation/Format/U2f.php?author=lbuchs">
  685. <img class="avatar mr-2 avatar-user" src="https://avatars3.githubusercontent.com/u/37619779?s=48&amp;v=4" width="24" height="24" alt="@lbuchs" />
  686. </a> <a class="avatar-link" data-hovercard-type="user" data-hovercard-url="/users/BenjaminHae/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/lbuchs/WebAuthn/commits/e62a6615894daaf061f91bc274064c5773074f81/src/Attestation/Format/U2f.php?author=BenjaminHae">
  687. <img class="avatar mr-2 avatar-user" src="https://avatars0.githubusercontent.com/u/7386033?s=48&amp;v=4" width="24" height="24" alt="@BenjaminHae" />
  688. </a>
  689. </span>
  690. </div>
  691. </div>
  692. <div class="Box mt-3 position-relative
  693. ">
  694. <div class="Box-header py-2 d-flex flex-column flex-shrink-0 flex-md-row flex-md-items-center">
  695. <div class="text-mono f6 flex-auto pr-3 flex-order-2 flex-md-order-1 mt-2 mt-md-0">
  696. 93 lines (74 sloc)
  697. <span class="file-info-divider"></span>
  698. 3.43 KB
  699. </div>
  700. <div class="d-flex py-1 py-md-0 flex-auto flex-order-1 flex-md-order-2 flex-sm-grow-0 flex-justify-between">
  701. <div class="BtnGroup">
  702. <a href="/lbuchs/WebAuthn/raw/master/src/Attestation/Format/U2f.php" id="raw-url" role="button" class="btn btn-sm BtnGroup-item ">Raw</a>
  703. <a href="/lbuchs/WebAuthn/blame/master/src/Attestation/Format/U2f.php" data-hotkey="b" role="button" class="btn js-update-url-with-hash btn-sm BtnGroup-item ">Blame</a>
  704. </div>
  705. <div>
  706. <a class="btn-octicon tooltipped tooltipped-nw js-remove-unless-platform"
  707. data-platforms="windows,mac"
  708. href="https://desktop.github.com"
  709. aria-label="Open this file in GitHub Desktop"
  710. data-ga-click="Repository, open with desktop">
  711. <svg class="octicon octicon-device-desktop" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M1.75 2.5h12.5a.25.25 0 01.25.25v7.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25v-7.5a.25.25 0 01.25-.25zM14.25 1H1.75A1.75 1.75 0 000 2.75v7.5C0 11.216.784 12 1.75 12h3.727c-.1 1.041-.52 1.872-1.292 2.757A.75.75 0 004.75 16h6.5a.75.75 0 00.565-1.243c-.772-.885-1.193-1.716-1.292-2.757h3.727A1.75 1.75 0 0016 10.25v-7.5A1.75 1.75 0 0014.25 1zM9.018 12H6.982a5.72 5.72 0 01-.765 2.5h3.566a5.72 5.72 0 01-.765-2.5z"></path></svg>
  712. </a>
  713. <a href="/login?return_to=%2Flbuchs%2FWebAuthn%2Fblob%2Fmaster%2Fsrc%2FAttestation%2FFormat%2FU2f.php" class="btn-octicon disabled tooltipped tooltipped-nw"
  714. aria-label="You must be signed in to make or propose changes">
  715. <svg class="octicon octicon-pencil" height="16" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M11.013 1.427a1.75 1.75 0 012.474 0l1.086 1.086a1.75 1.75 0 010 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 01-.927-.928l.929-3.25a1.75 1.75 0 01.445-.758l8.61-8.61zm1.414 1.06a.25.25 0 00-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 000-.354l-1.086-1.086zM11.189 6.25L9.75 4.81l-6.286 6.287a.25.25 0 00-.064.108l-.558 1.953 1.953-.558a.249.249 0 00.108-.064l6.286-6.286z"></path></svg>
  716. </a>
  717. <a href="/login?return_to=%2Flbuchs%2FWebAuthn%2Fblob%2Fmaster%2Fsrc%2FAttestation%2FFormat%2FU2f.php" class="btn-octicon btn-octicon-danger disabled tooltipped tooltipped-nw"
  718. aria-label="You must be signed in to make or propose changes">
  719. <svg class="octicon octicon-trashcan" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M6.5 1.75a.25.25 0 01.25-.25h2.5a.25.25 0 01.25.25V3h-3V1.75zm4.5 0V3h2.25a.75.75 0 010 1.5H2.75a.75.75 0 010-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75zM4.496 6.675a.75.75 0 10-1.492.15l.66 6.6A1.75 1.75 0 005.405 15h5.19c.9 0 1.652-.681 1.741-1.576l.66-6.6a.75.75 0 00-1.492-.149l-.66 6.6a.25.25 0 01-.249.225h-5.19a.25.25 0 01-.249-.225l-.66-6.6z"></path></svg>
  720. </a>
  721. </div>
  722. </div>
  723. </div>
  724. <div itemprop="text" class="Box-body p-0 blob-wrapper data type-php gist-border-0">
  725. <table class="highlight tab-size js-file-line-container" data-tab-size="8" data-paste-markdown-skip>
  726. <tr>
  727. <td id="L1" class="blob-num js-line-number" data-line-number="1"></td>
  728. <td id="LC1" class="blob-code blob-code-inner js-file-line"><span class=pl-ent>&lt;?php</span></td>
  729. </tr>
  730. <tr>
  731. <td id="L2" class="blob-num js-line-number" data-line-number="2"></td>
  732. <td id="LC2" class="blob-code blob-code-inner js-file-line">
  733. </td>
  734. </tr>
  735. <tr>
  736. <td id="L3" class="blob-num js-line-number" data-line-number="3"></td>
  737. <td id="LC3" class="blob-code blob-code-inner js-file-line">
  738. </td>
  739. </tr>
  740. <tr>
  741. <td id="L4" class="blob-num js-line-number" data-line-number="4"></td>
  742. <td id="LC4" class="blob-code blob-code-inner js-file-line"><span class=pl-k>namespace</span> lbuchs\<span class=pl-v>WebAuthn</span>\<span class=pl-v>Attestation</span>\<span class=pl-v>Format</span>;</td>
  743. </tr>
  744. <tr>
  745. <td id="L5" class="blob-num js-line-number" data-line-number="5"></td>
  746. <td id="LC5" class="blob-code blob-code-inner js-file-line"><span class=pl-k>use</span> lbuchs\<span class=pl-v>WebAuthn</span>\<span class=pl-v>Attestation</span>\<span class=pl-v>AuthenticatorData</span>;</td>
  747. </tr>
  748. <tr>
  749. <td id="L6" class="blob-num js-line-number" data-line-number="6"></td>
  750. <td id="LC6" class="blob-code blob-code-inner js-file-line"><span class=pl-k>use</span> lbuchs\<span class=pl-v>WebAuthn</span>\<span class=pl-v>WebAuthnException</span>;</td>
  751. </tr>
  752. <tr>
  753. <td id="L7" class="blob-num js-line-number" data-line-number="7"></td>
  754. <td id="LC7" class="blob-code blob-code-inner js-file-line"><span class=pl-k>use</span> lbuchs\<span class=pl-v>WebAuthn</span>\<span class=pl-v>Binary</span>\<span class=pl-v>ByteBuffer</span>;</td>
  755. </tr>
  756. <tr>
  757. <td id="L8" class="blob-num js-line-number" data-line-number="8"></td>
  758. <td id="LC8" class="blob-code blob-code-inner js-file-line">
  759. </td>
  760. </tr>
  761. <tr>
  762. <td id="L9" class="blob-num js-line-number" data-line-number="9"></td>
  763. <td id="LC9" class="blob-code blob-code-inner js-file-line"><span class=pl-k>class</span> <span class=pl-v>U2f</span> <span class=pl-k>extends</span> <span class=pl-v>FormatBase</span> {</td>
  764. </tr>
  765. <tr>
  766. <td id="L10" class="blob-num js-line-number" data-line-number="10"></td>
  767. <td id="LC10" class="blob-code blob-code-inner js-file-line"> <span class=pl-k>private</span> <span class=pl-c1><span class=pl-c1>$</span>_alg</span> = -<span class=pl-c1>7</span>;</td>
  768. </tr>
  769. <tr>
  770. <td id="L11" class="blob-num js-line-number" data-line-number="11"></td>
  771. <td id="LC11" class="blob-code blob-code-inner js-file-line"> <span class=pl-k>private</span> <span class=pl-c1><span class=pl-c1>$</span>_signature</span>;</td>
  772. </tr>
  773. <tr>
  774. <td id="L12" class="blob-num js-line-number" data-line-number="12"></td>
  775. <td id="LC12" class="blob-code blob-code-inner js-file-line"> <span class=pl-k>private</span> <span class=pl-c1><span class=pl-c1>$</span>_x5c</span>;</td>
  776. </tr>
  777. <tr>
  778. <td id="L13" class="blob-num js-line-number" data-line-number="13"></td>
  779. <td id="LC13" class="blob-code blob-code-inner js-file-line">
  780. </td>
  781. </tr>
  782. <tr>
  783. <td id="L14" class="blob-num js-line-number" data-line-number="14"></td>
  784. <td id="LC14" class="blob-code blob-code-inner js-file-line"> <span class=pl-k>public</span> <span class=pl-k>function</span> <span class=pl-en>__construct</span>(<span class=pl-s1><span class=pl-c1>$</span><span class=pl-v>AttestionObject</span></span>, <span class=pl-smi>AuthenticatorData</span> <span class=pl-s1><span class=pl-c1>$</span>authenticatorData</span>) {</td>
  785. </tr>
  786. <tr>
  787. <td id="L15" class="blob-num js-line-number" data-line-number="15"></td>
  788. <td id="LC15" class="blob-code blob-code-inner js-file-line"> <span class=pl-smi>parent</span>::<span class=pl-en>__construct</span>(<span class=pl-s1><span class=pl-c1>$</span><span class=pl-v>AttestionObject</span></span>, <span class=pl-s1><span class=pl-c1>$</span>authenticatorData</span>);</td>
  789. </tr>
  790. <tr>
  791. <td id="L16" class="blob-num js-line-number" data-line-number="16"></td>
  792. <td id="LC16" class="blob-code blob-code-inner js-file-line">
  793. </td>
  794. </tr>
  795. <tr>
  796. <td id="L17" class="blob-num js-line-number" data-line-number="17"></td>
  797. <td id="LC17" class="blob-code blob-code-inner js-file-line"> <span class=pl-c>// check u2f data</span></td>
  798. </tr>
  799. <tr>
  800. <td id="L18" class="blob-num js-line-number" data-line-number="18"></td>
  801. <td id="LC18" class="blob-code blob-code-inner js-file-line"> <span class=pl-s1><span class=pl-c1>$</span>attStmt</span> = <span class=pl-s1><span class=pl-c1>$</span><span class=pl-smi>this</span></span>-&gt;<span class=pl-c1>_attestationObject</span>[<span class=pl-s>&#39;attStmt&#39;</span>];</td>
  802. </tr>
  803. <tr>
  804. <td id="L19" class="blob-num js-line-number" data-line-number="19"></td>
  805. <td id="LC19" class="blob-code blob-code-inner js-file-line">
  806. </td>
  807. </tr>
  808. <tr>
  809. <td id="L20" class="blob-num js-line-number" data-line-number="20"></td>
  810. <td id="LC20" class="blob-code blob-code-inner js-file-line"> <span class=pl-k>if</span> (<span class=pl-en>\array_key_exists</span>(<span class=pl-s>&#39;alg&#39;</span>, <span class=pl-s1><span class=pl-c1>$</span>attStmt</span>) &amp;&amp; <span class=pl-s1><span class=pl-c1>$</span>attStmt</span>[<span class=pl-s>&#39;alg&#39;</span>] !== <span class=pl-s1><span class=pl-c1>$</span><span class=pl-smi>this</span></span>-&gt;<span class=pl-c1>_alg</span>) {</td>
  811. </tr>
  812. <tr>
  813. <td id="L21" class="blob-num js-line-number" data-line-number="21"></td>
  814. <td id="LC21" class="blob-code blob-code-inner js-file-line"> <span class=pl-k>throw</span> <span class=pl-k>new</span> <span class=pl-v>WebAuthnException</span>(<span class=pl-s>&#39;u2f only accepts algorithm -7 (&quot;ES256&quot;), but got &#39;</span> . <span class=pl-s1><span class=pl-c1>$</span>attStmt</span>[<span class=pl-s>&#39;alg&#39;</span>], <span class=pl-v>WebAuthnException</span>::<span class=pl-c1>INVALID_DATA</span>);</td>
  815. </tr>
  816. <tr>
  817. <td id="L22" class="blob-num js-line-number" data-line-number="22"></td>
  818. <td id="LC22" class="blob-code blob-code-inner js-file-line"> }</td>
  819. </tr>
  820. <tr>
  821. <td id="L23" class="blob-num js-line-number" data-line-number="23"></td>
  822. <td id="LC23" class="blob-code blob-code-inner js-file-line">
  823. </td>
  824. </tr>
  825. <tr>
  826. <td id="L24" class="blob-num js-line-number" data-line-number="24"></td>
  827. <td id="LC24" class="blob-code blob-code-inner js-file-line"> <span class=pl-k>if</span> (!<span class=pl-en>\array_key_exists</span>(<span class=pl-s>&#39;sig&#39;</span>, <span class=pl-s1><span class=pl-c1>$</span>attStmt</span>) || !<span class=pl-en>\is_object</span>(<span class=pl-s1><span class=pl-c1>$</span>attStmt</span>[<span class=pl-s>&#39;sig&#39;</span>]) || !(<span class=pl-s1><span class=pl-c1>$</span>attStmt</span>[<span class=pl-s>&#39;sig&#39;</span>] instanceof <span class=pl-v>ByteBuffer</span>)) {</td>
  828. </tr>
  829. <tr>
  830. <td id="L25" class="blob-num js-line-number" data-line-number="25"></td>
  831. <td id="LC25" class="blob-code blob-code-inner js-file-line"> <span class=pl-k>throw</span> <span class=pl-k>new</span> <span class=pl-v>WebAuthnException</span>(<span class=pl-s>&#39;no signature found&#39;</span>, <span class=pl-v>WebAuthnException</span>::<span class=pl-c1>INVALID_DATA</span>);</td>
  832. </tr>
  833. <tr>
  834. <td id="L26" class="blob-num js-line-number" data-line-number="26"></td>
  835. <td id="LC26" class="blob-code blob-code-inner js-file-line"> }</td>
  836. </tr>
  837. <tr>
  838. <td id="L27" class="blob-num js-line-number" data-line-number="27"></td>
  839. <td id="LC27" class="blob-code blob-code-inner js-file-line">
  840. </td>
  841. </tr>
  842. <tr>
  843. <td id="L28" class="blob-num js-line-number" data-line-number="28"></td>
  844. <td id="LC28" class="blob-code blob-code-inner js-file-line"> <span class=pl-k>if</span> (!<span class=pl-en>\array_key_exists</span>(<span class=pl-s>&#39;x5c&#39;</span>, <span class=pl-s1><span class=pl-c1>$</span>attStmt</span>) || !<span class=pl-en>\is_array</span>(<span class=pl-s1><span class=pl-c1>$</span>attStmt</span>[<span class=pl-s>&#39;x5c&#39;</span>]) || <span class=pl-en>\count</span>(<span class=pl-s1><span class=pl-c1>$</span>attStmt</span>[<span class=pl-s>&#39;x5c&#39;</span>]) !== <span class=pl-c1>1</span>) {</td>
  845. </tr>
  846. <tr>
  847. <td id="L29" class="blob-num js-line-number" data-line-number="29"></td>
  848. <td id="LC29" class="blob-code blob-code-inner js-file-line"> <span class=pl-k>throw</span> <span class=pl-k>new</span> <span class=pl-v>WebAuthnException</span>(<span class=pl-s>&#39;invalid x5c certificate&#39;</span>, <span class=pl-v>WebAuthnException</span>::<span class=pl-c1>INVALID_DATA</span>);</td>
  849. </tr>
  850. <tr>
  851. <td id="L30" class="blob-num js-line-number" data-line-number="30"></td>
  852. <td id="LC30" class="blob-code blob-code-inner js-file-line"> }</td>
  853. </tr>
  854. <tr>
  855. <td id="L31" class="blob-num js-line-number" data-line-number="31"></td>
  856. <td id="LC31" class="blob-code blob-code-inner js-file-line">
  857. </td>
  858. </tr>
  859. <tr>
  860. <td id="L32" class="blob-num js-line-number" data-line-number="32"></td>
  861. <td id="LC32" class="blob-code blob-code-inner js-file-line"> <span class=pl-k>if</span> (!<span class=pl-en>\is_object</span>(<span class=pl-s1><span class=pl-c1>$</span>attStmt</span>[<span class=pl-s>&#39;x5c&#39;</span>][<span class=pl-c1>0</span>]) || !(<span class=pl-s1><span class=pl-c1>$</span>attStmt</span>[<span class=pl-s>&#39;x5c&#39;</span>][<span class=pl-c1>0</span>] instanceof <span class=pl-v>ByteBuffer</span>)) {</td>
  862. </tr>
  863. <tr>
  864. <td id="L33" class="blob-num js-line-number" data-line-number="33"></td>
  865. <td id="LC33" class="blob-code blob-code-inner js-file-line"> <span class=pl-k>throw</span> <span class=pl-k>new</span> <span class=pl-v>WebAuthnException</span>(<span class=pl-s>&#39;invalid x5c certificate&#39;</span>, <span class=pl-v>WebAuthnException</span>::<span class=pl-c1>INVALID_DATA</span>);</td>
  866. </tr>
  867. <tr>
  868. <td id="L34" class="blob-num js-line-number" data-line-number="34"></td>
  869. <td id="LC34" class="blob-code blob-code-inner js-file-line"> }</td>
  870. </tr>
  871. <tr>
  872. <td id="L35" class="blob-num js-line-number" data-line-number="35"></td>
  873. <td id="LC35" class="blob-code blob-code-inner js-file-line">
  874. </td>
  875. </tr>
  876. <tr>
  877. <td id="L36" class="blob-num js-line-number" data-line-number="36"></td>
  878. <td id="LC36" class="blob-code blob-code-inner js-file-line"> <span class=pl-s1><span class=pl-c1>$</span><span class=pl-smi>this</span></span>-&gt;<span class=pl-c1>_signature</span> = <span class=pl-s1><span class=pl-c1>$</span>attStmt</span>[<span class=pl-s>&#39;sig&#39;</span>]-&gt;<span class=pl-en>getBinaryString</span>();</td>
  879. </tr>
  880. <tr>
  881. <td id="L37" class="blob-num js-line-number" data-line-number="37"></td>
  882. <td id="LC37" class="blob-code blob-code-inner js-file-line"> <span class=pl-s1><span class=pl-c1>$</span><span class=pl-smi>this</span></span>-&gt;<span class=pl-c1>_x5c</span> = <span class=pl-s1><span class=pl-c1>$</span>attStmt</span>[<span class=pl-s>&#39;x5c&#39;</span>][<span class=pl-c1>0</span>]-&gt;<span class=pl-en>getBinaryString</span>();</td>
  883. </tr>
  884. <tr>
  885. <td id="L38" class="blob-num js-line-number" data-line-number="38"></td>
  886. <td id="LC38" class="blob-code blob-code-inner js-file-line"> }</td>
  887. </tr>
  888. <tr>
  889. <td id="L39" class="blob-num js-line-number" data-line-number="39"></td>
  890. <td id="LC39" class="blob-code blob-code-inner js-file-line">
  891. </td>
  892. </tr>
  893. <tr>
  894. <td id="L40" class="blob-num js-line-number" data-line-number="40"></td>
  895. <td id="LC40" class="blob-code blob-code-inner js-file-line">
  896. </td>
  897. </tr>
  898. <tr>
  899. <td id="L41" class="blob-num js-line-number" data-line-number="41"></td>
  900. <td id="LC41" class="blob-code blob-code-inner js-file-line"> <span class=pl-c>/*</span></td>
  901. </tr>
  902. <tr>
  903. <td id="L42" class="blob-num js-line-number" data-line-number="42"></td>
  904. <td id="LC42" class="blob-code blob-code-inner js-file-line"><span class=pl-c> * returns the key certificate in PEM format</span></td>
  905. </tr>
  906. <tr>
  907. <td id="L43" class="blob-num js-line-number" data-line-number="43"></td>
  908. <td id="LC43" class="blob-code blob-code-inner js-file-line"><span class=pl-c> * @return string</span></td>
  909. </tr>
  910. <tr>
  911. <td id="L44" class="blob-num js-line-number" data-line-number="44"></td>
  912. <td id="LC44" class="blob-code blob-code-inner js-file-line"><span class=pl-c> */</span></td>
  913. </tr>
  914. <tr>
  915. <td id="L45" class="blob-num js-line-number" data-line-number="45"></td>
  916. <td id="LC45" class="blob-code blob-code-inner js-file-line"> <span class=pl-k>public</span> <span class=pl-k>function</span> <span class=pl-en>getCertificatePem</span>() {</td>
  917. </tr>
  918. <tr>
  919. <td id="L46" class="blob-num js-line-number" data-line-number="46"></td>
  920. <td id="LC46" class="blob-code blob-code-inner js-file-line"> <span class=pl-s1><span class=pl-c1>$</span>pem</span> = <span class=pl-s>&#39;-----BEGIN CERTIFICATE-----&#39;</span> . <span class=pl-s>&quot;\n&quot;</span>;</td>
  921. </tr>
  922. <tr>
  923. <td id="L47" class="blob-num js-line-number" data-line-number="47"></td>
  924. <td id="LC47" class="blob-code blob-code-inner js-file-line"> <span class=pl-s1><span class=pl-c1>$</span>pem</span> .= <span class=pl-en>\chunk_split</span>(<span class=pl-en>\base64_encode</span>(<span class=pl-s1><span class=pl-c1>$</span><span class=pl-smi>this</span></span>-&gt;<span class=pl-c1>_x5c</span>), <span class=pl-c1>64</span>, <span class=pl-s>&quot;\n&quot;</span>);</td>
  925. </tr>
  926. <tr>
  927. <td id="L48" class="blob-num js-line-number" data-line-number="48"></td>
  928. <td id="LC48" class="blob-code blob-code-inner js-file-line"> <span class=pl-s1><span class=pl-c1>$</span>pem</span> .= <span class=pl-s>&#39;-----END CERTIFICATE-----&#39;</span> . <span class=pl-s>&quot;\n&quot;</span>;</td>
  929. </tr>
  930. <tr>
  931. <td id="L49" class="blob-num js-line-number" data-line-number="49"></td>
  932. <td id="LC49" class="blob-code blob-code-inner js-file-line"> <span class=pl-k>return</span> <span class=pl-s1><span class=pl-c1>$</span>pem</span>;</td>
  933. </tr>
  934. <tr>
  935. <td id="L50" class="blob-num js-line-number" data-line-number="50"></td>
  936. <td id="LC50" class="blob-code blob-code-inner js-file-line"> }</td>
  937. </tr>
  938. <tr>
  939. <td id="L51" class="blob-num js-line-number" data-line-number="51"></td>
  940. <td id="LC51" class="blob-code blob-code-inner js-file-line">
  941. </td>
  942. </tr>
  943. <tr>
  944. <td id="L52" class="blob-num js-line-number" data-line-number="52"></td>
  945. <td id="LC52" class="blob-code blob-code-inner js-file-line"> <span class=pl-c>/**</span></td>
  946. </tr>
  947. <tr>
  948. <td id="L53" class="blob-num js-line-number" data-line-number="53"></td>
  949. <td id="LC53" class="blob-code blob-code-inner js-file-line"><span class=pl-c> * @param string $clientDataHash</span></td>
  950. </tr>
  951. <tr>
  952. <td id="L54" class="blob-num js-line-number" data-line-number="54"></td>
  953. <td id="LC54" class="blob-code blob-code-inner js-file-line"><span class=pl-c> */</span></td>
  954. </tr>
  955. <tr>
  956. <td id="L55" class="blob-num js-line-number" data-line-number="55"></td>
  957. <td id="LC55" class="blob-code blob-code-inner js-file-line"> <span class=pl-k>public</span> <span class=pl-k>function</span> <span class=pl-en>validateAttestation</span>(<span class=pl-s1><span class=pl-c1>$</span>clientDataHash</span>) {</td>
  958. </tr>
  959. <tr>
  960. <td id="L56" class="blob-num js-line-number" data-line-number="56"></td>
  961. <td id="LC56" class="blob-code blob-code-inner js-file-line"> <span class=pl-s1><span class=pl-c1>$</span>publicKey</span> = <span class=pl-en>\openssl_pkey_get_public</span>(<span class=pl-s1><span class=pl-c1>$</span><span class=pl-smi>this</span></span>-&gt;<span class=pl-en>getCertificatePem</span>());</td>
  962. </tr>
  963. <tr>
  964. <td id="L57" class="blob-num js-line-number" data-line-number="57"></td>
  965. <td id="LC57" class="blob-code blob-code-inner js-file-line">
  966. </td>
  967. </tr>
  968. <tr>
  969. <td id="L58" class="blob-num js-line-number" data-line-number="58"></td>
  970. <td id="LC58" class="blob-code blob-code-inner js-file-line"> <span class=pl-k>if</span> (<span class=pl-s1><span class=pl-c1>$</span>publicKey</span> === <span class=pl-c1>false</span>) {</td>
  971. </tr>
  972. <tr>
  973. <td id="L59" class="blob-num js-line-number" data-line-number="59"></td>
  974. <td id="LC59" class="blob-code blob-code-inner js-file-line"> <span class=pl-k>throw</span> <span class=pl-k>new</span> <span class=pl-v>WebAuthnException</span>(<span class=pl-s>&#39;invalid public key: &#39;</span> . <span class=pl-en>\openssl_error_string</span>(), <span class=pl-v>WebAuthnException</span>::<span class=pl-c1>INVALID_PUBLIC_KEY</span>);</td>
  975. </tr>
  976. <tr>
  977. <td id="L60" class="blob-num js-line-number" data-line-number="60"></td>
  978. <td id="LC60" class="blob-code blob-code-inner js-file-line"> }</td>
  979. </tr>
  980. <tr>
  981. <td id="L61" class="blob-num js-line-number" data-line-number="61"></td>
  982. <td id="LC61" class="blob-code blob-code-inner js-file-line">
  983. </td>
  984. </tr>
  985. <tr>
  986. <td id="L62" class="blob-num js-line-number" data-line-number="62"></td>
  987. <td id="LC62" class="blob-code blob-code-inner js-file-line"> <span class=pl-c>// Let verificationData be the concatenation of (0x00 || rpIdHash || clientDataHash || credentialId || publicKeyU2F)</span></td>
  988. </tr>
  989. <tr>
  990. <td id="L63" class="blob-num js-line-number" data-line-number="63"></td>
  991. <td id="LC63" class="blob-code blob-code-inner js-file-line"> <span class=pl-s1><span class=pl-c1>$</span>dataToVerify</span> = <span class=pl-s>&quot;\x00&quot;</span>;</td>
  992. </tr>
  993. <tr>
  994. <td id="L64" class="blob-num js-line-number" data-line-number="64"></td>
  995. <td id="LC64" class="blob-code blob-code-inner js-file-line"> <span class=pl-s1><span class=pl-c1>$</span>dataToVerify</span> .= <span class=pl-s1><span class=pl-c1>$</span><span class=pl-smi>this</span></span>-&gt;<span class=pl-c1>_authenticatorData</span>-&gt;<span class=pl-en>getRpIdHash</span>();</td>
  996. </tr>
  997. <tr>
  998. <td id="L65" class="blob-num js-line-number" data-line-number="65"></td>
  999. <td id="LC65" class="blob-code blob-code-inner js-file-line"> <span class=pl-s1><span class=pl-c1>$</span>dataToVerify</span> .= <span class=pl-s1><span class=pl-c1>$</span>clientDataHash</span>;</td>
  1000. </tr>
  1001. <tr>
  1002. <td id="L66" class="blob-num js-line-number" data-line-number="66"></td>
  1003. <td id="LC66" class="blob-code blob-code-inner js-file-line"> <span class=pl-s1><span class=pl-c1>$</span>dataToVerify</span> .= <span class=pl-s1><span class=pl-c1>$</span><span class=pl-smi>this</span></span>-&gt;<span class=pl-c1>_authenticatorData</span>-&gt;<span class=pl-en>getCredentialId</span>();</td>
  1004. </tr>
  1005. <tr>
  1006. <td id="L67" class="blob-num js-line-number" data-line-number="67"></td>
  1007. <td id="LC67" class="blob-code blob-code-inner js-file-line"> <span class=pl-s1><span class=pl-c1>$</span>dataToVerify</span> .= <span class=pl-s1><span class=pl-c1>$</span><span class=pl-smi>this</span></span>-&gt;<span class=pl-c1>_authenticatorData</span>-&gt;<span class=pl-en>getPublicKeyU2F</span>();</td>
  1008. </tr>
  1009. <tr>
  1010. <td id="L68" class="blob-num js-line-number" data-line-number="68"></td>
  1011. <td id="LC68" class="blob-code blob-code-inner js-file-line">
  1012. </td>
  1013. </tr>
  1014. <tr>
  1015. <td id="L69" class="blob-num js-line-number" data-line-number="69"></td>
  1016. <td id="LC69" class="blob-code blob-code-inner js-file-line"> <span class=pl-s1><span class=pl-c1>$</span>coseAlgorithm</span> = <span class=pl-s1><span class=pl-c1>$</span><span class=pl-smi>this</span></span>-&gt;<span class=pl-en>_getCoseAlgorithm</span>(<span class=pl-s1><span class=pl-c1>$</span><span class=pl-smi>this</span></span>-&gt;<span class=pl-c1>_alg</span>);</td>
  1017. </tr>
  1018. <tr>
  1019. <td id="L70" class="blob-num js-line-number" data-line-number="70"></td>
  1020. <td id="LC70" class="blob-code blob-code-inner js-file-line">
  1021. </td>
  1022. </tr>
  1023. <tr>
  1024. <td id="L71" class="blob-num js-line-number" data-line-number="71"></td>
  1025. <td id="LC71" class="blob-code blob-code-inner js-file-line"> <span class=pl-c>// check certificate</span></td>
  1026. </tr>
  1027. <tr>
  1028. <td id="L72" class="blob-num js-line-number" data-line-number="72"></td>
  1029. <td id="LC72" class="blob-code blob-code-inner js-file-line"> <span class=pl-k>return</span> <span class=pl-en>\openssl_verify</span>(<span class=pl-s1><span class=pl-c1>$</span>dataToVerify</span>, <span class=pl-s1><span class=pl-c1>$</span><span class=pl-smi>this</span></span>-&gt;<span class=pl-c1>_signature</span>, <span class=pl-s1><span class=pl-c1>$</span>publicKey</span>, <span class=pl-s1><span class=pl-c1>$</span>coseAlgorithm</span>-&gt;<span class=pl-c1>openssl</span>) === <span class=pl-c1>1</span>;</td>
  1030. </tr>
  1031. <tr>
  1032. <td id="L73" class="blob-num js-line-number" data-line-number="73"></td>
  1033. <td id="LC73" class="blob-code blob-code-inner js-file-line"> }</td>
  1034. </tr>
  1035. <tr>
  1036. <td id="L74" class="blob-num js-line-number" data-line-number="74"></td>
  1037. <td id="LC74" class="blob-code blob-code-inner js-file-line">
  1038. </td>
  1039. </tr>
  1040. <tr>
  1041. <td id="L75" class="blob-num js-line-number" data-line-number="75"></td>
  1042. <td id="LC75" class="blob-code blob-code-inner js-file-line"> <span class=pl-c>/**</span></td>
  1043. </tr>
  1044. <tr>
  1045. <td id="L76" class="blob-num js-line-number" data-line-number="76"></td>
  1046. <td id="LC76" class="blob-code blob-code-inner js-file-line"><span class=pl-c> * validates the certificate against root certificates</span></td>
  1047. </tr>
  1048. <tr>
  1049. <td id="L77" class="blob-num js-line-number" data-line-number="77"></td>
  1050. <td id="LC77" class="blob-code blob-code-inner js-file-line"><span class=pl-c> * @param array $rootCas</span></td>
  1051. </tr>
  1052. <tr>
  1053. <td id="L78" class="blob-num js-line-number" data-line-number="78"></td>
  1054. <td id="LC78" class="blob-code blob-code-inner js-file-line"><span class=pl-c> * @return boolean</span></td>
  1055. </tr>
  1056. <tr>
  1057. <td id="L79" class="blob-num js-line-number" data-line-number="79"></td>
  1058. <td id="LC79" class="blob-code blob-code-inner js-file-line"><span class=pl-c> * @throws WebAuthnException</span></td>
  1059. </tr>
  1060. <tr>
  1061. <td id="L80" class="blob-num js-line-number" data-line-number="80"></td>
  1062. <td id="LC80" class="blob-code blob-code-inner js-file-line"><span class=pl-c> */</span></td>
  1063. </tr>
  1064. <tr>
  1065. <td id="L81" class="blob-num js-line-number" data-line-number="81"></td>
  1066. <td id="LC81" class="blob-code blob-code-inner js-file-line"> <span class=pl-k>public</span> <span class=pl-k>function</span> <span class=pl-en>validateRootCertificate</span>(<span class=pl-s1><span class=pl-c1>$</span>rootCas</span>) {</td>
  1067. </tr>
  1068. <tr>
  1069. <td id="L82" class="blob-num js-line-number" data-line-number="82"></td>
  1070. <td id="LC82" class="blob-code blob-code-inner js-file-line"> <span class=pl-s1><span class=pl-c1>$</span>chainC</span> = <span class=pl-s1><span class=pl-c1>$</span><span class=pl-smi>this</span></span>-&gt;<span class=pl-en>_createX5cChainFile</span>();</td>
  1071. </tr>
  1072. <tr>
  1073. <td id="L83" class="blob-num js-line-number" data-line-number="83"></td>
  1074. <td id="LC83" class="blob-code blob-code-inner js-file-line"> <span class=pl-k>if</span> (<span class=pl-s1><span class=pl-c1>$</span>chainC</span>) {</td>
  1075. </tr>
  1076. <tr>
  1077. <td id="L84" class="blob-num js-line-number" data-line-number="84"></td>
  1078. <td id="LC84" class="blob-code blob-code-inner js-file-line"> <span class=pl-s1><span class=pl-c1>$</span>rootCas</span>[] = <span class=pl-s1><span class=pl-c1>$</span>chainC</span>;</td>
  1079. </tr>
  1080. <tr>
  1081. <td id="L85" class="blob-num js-line-number" data-line-number="85"></td>
  1082. <td id="LC85" class="blob-code blob-code-inner js-file-line"> }</td>
  1083. </tr>
  1084. <tr>
  1085. <td id="L86" class="blob-num js-line-number" data-line-number="86"></td>
  1086. <td id="LC86" class="blob-code blob-code-inner js-file-line">
  1087. </td>
  1088. </tr>
  1089. <tr>
  1090. <td id="L87" class="blob-num js-line-number" data-line-number="87"></td>
  1091. <td id="LC87" class="blob-code blob-code-inner js-file-line"> <span class=pl-s1><span class=pl-c1>$</span>v</span> = <span class=pl-en>\openssl_x509_checkpurpose</span>(<span class=pl-s1><span class=pl-c1>$</span><span class=pl-smi>this</span></span>-&gt;<span class=pl-en>getCertificatePem</span>(), -<span class=pl-c1>1</span>, <span class=pl-s1><span class=pl-c1>$</span>rootCas</span>);</td>
  1092. </tr>
  1093. <tr>
  1094. <td id="L88" class="blob-num js-line-number" data-line-number="88"></td>
  1095. <td id="LC88" class="blob-code blob-code-inner js-file-line"> <span class=pl-k>if</span> (<span class=pl-s1><span class=pl-c1>$</span>v</span> === -<span class=pl-c1>1</span>) {</td>
  1096. </tr>
  1097. <tr>
  1098. <td id="L89" class="blob-num js-line-number" data-line-number="89"></td>
  1099. <td id="LC89" class="blob-code blob-code-inner js-file-line"> <span class=pl-k>throw</span> <span class=pl-k>new</span> <span class=pl-v>WebAuthnException</span>(<span class=pl-s>&#39;error on validating root certificate: &#39;</span> . <span class=pl-en>\openssl_error_string</span>(), <span class=pl-v>WebAuthnException</span>::<span class=pl-c1>CERTIFICATE_NOT_TRUSTED</span>);</td>
  1100. </tr>
  1101. <tr>
  1102. <td id="L90" class="blob-num js-line-number" data-line-number="90"></td>
  1103. <td id="LC90" class="blob-code blob-code-inner js-file-line"> }</td>
  1104. </tr>
  1105. <tr>
  1106. <td id="L91" class="blob-num js-line-number" data-line-number="91"></td>
  1107. <td id="LC91" class="blob-code blob-code-inner js-file-line"> <span class=pl-k>return</span> <span class=pl-s1><span class=pl-c1>$</span>v</span>;</td>
  1108. </tr>
  1109. <tr>
  1110. <td id="L92" class="blob-num js-line-number" data-line-number="92"></td>
  1111. <td id="LC92" class="blob-code blob-code-inner js-file-line"> }</td>
  1112. </tr>
  1113. <tr>
  1114. <td id="L93" class="blob-num js-line-number" data-line-number="93"></td>
  1115. <td id="LC93" class="blob-code blob-code-inner js-file-line">}</td>
  1116. </tr>
  1117. </table>
  1118. <details class="details-reset details-overlay BlobToolbar position-absolute js-file-line-actions dropdown d-none" aria-hidden="true">
  1119. <summary class="btn-octicon ml-0 px-2 p-0 bg-white border border-gray-dark rounded-1" aria-label="Inline file action toolbar">
  1120. <svg class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path></svg>
  1121. </summary>
  1122. <details-menu>
  1123. <ul class="BlobToolbar-dropdown dropdown-menu dropdown-menu-se mt-2" style="width:185px">
  1124. <li>
  1125. <clipboard-copy role="menuitem" class="dropdown-item" id="js-copy-lines" style="cursor:pointer;">
  1126. Copy lines
  1127. </clipboard-copy>
  1128. </li>
  1129. <li>
  1130. <clipboard-copy role="menuitem" class="dropdown-item" id="js-copy-permalink" style="cursor:pointer;">
  1131. Copy permalink
  1132. </clipboard-copy>
  1133. </li>
  1134. <li><a class="dropdown-item js-update-url-with-hash" id="js-view-git-blame" role="menuitem" href="/lbuchs/WebAuthn/blame/e62a6615894daaf061f91bc274064c5773074f81/src/Attestation/Format/U2f.php">View git blame</a></li>
  1135. <li><a class="dropdown-item" id="js-new-issue" role="menuitem" href="/lbuchs/WebAuthn/issues/new">Reference in new issue</a></li>
  1136. </ul>
  1137. </details-menu>
  1138. </details>
  1139. </div>
  1140. </div>
  1141. <details class="details-reset details-overlay details-overlay-dark" id="jumpto-line-details-dialog">
  1142. <summary data-hotkey="l" aria-label="Jump to line"></summary>
  1143. <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast linejump" aria-label="Jump to line">
  1144. <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="js-jump-to-line-form Box-body d-flex" action="" accept-charset="UTF-8" method="get">
  1145. <input class="form-control flex-auto mr-3 linejump-input js-jump-to-line-field" type="text" placeholder="Jump to line&hellip;" aria-label="Jump to line" autofocus>
  1146. <button type="submit" class="btn" data-close-dialog>Go</button>
  1147. </form> </details-dialog>
  1148. </details>
  1149. <div class="Popover anim-scale-in js-tagsearch-popover"
  1150. hidden
  1151. data-tagsearch-url="/lbuchs/WebAuthn/find-definition"
  1152. data-tagsearch-ref="master"
  1153. data-tagsearch-path="src/Attestation/Format/U2f.php"
  1154. data-tagsearch-lang="PHP"
  1155. data-hydro-click="{&quot;event_type&quot;:&quot;code_navigation.click_on_symbol&quot;,&quot;payload&quot;:{&quot;action&quot;:&quot;click_on_symbol&quot;,&quot;repository_id&quot;:149437753,&quot;ref&quot;:&quot;master&quot;,&quot;language&quot;:&quot;PHP&quot;,&quot;originating_url&quot;:&quot;https://github.com/lbuchs/WebAuthn/blob/master/src/Attestation/Format/U2f.php&quot;,&quot;user_id&quot;:null}}"
  1156. data-hydro-click-hmac="8624216e48f425d935124bbdbf398afde9f9355fa3c38555f17245b4353a60e8">
  1157. <div class="Popover-message Popover-message--large Popover-message--top-left TagsearchPopover mt-1 mb-4 mx-auto Box box-shadow-large">
  1158. <div class="TagsearchPopover-content js-tagsearch-popover-content overflow-auto" style="will-change:transform;">
  1159. </div>
  1160. </div>
  1161. </div>
  1162. </div>
  1163. </div>
  1164. </main>
  1165. </div>
  1166. </div>
  1167. <div class="footer container-xl width-full p-responsive" role="contentinfo">
  1168. <div class="position-relative d-flex flex-row-reverse flex-lg-row flex-wrap flex-lg-nowrap flex-justify-center flex-lg-justify-between pt-6 pb-2 mt-6 f6 text-gray border-top border-gray-light ">
  1169. <ul class="list-style-none d-flex flex-wrap col-12 col-lg-5 flex-justify-center flex-lg-justify-between mb-2 mb-lg-0">
  1170. <li class="mr-3 mr-lg-0">&copy; 2021 GitHub, Inc.</li>
  1171. <li class="mr-3 mr-lg-0"><a data-ga-click="Footer, go to terms, text:terms" href="https://github.com/site/terms">Terms</a></li>
  1172. <li class="mr-3 mr-lg-0"><a data-ga-click="Footer, go to privacy, text:privacy" href="https://github.com/site/privacy">Privacy</a></li>
  1173. <li class="mr-3 mr-lg-0"><a data-ga-click="Footer, go to security, text:security" href="https://github.com/security">Security</a></li>
  1174. <li class="mr-3 mr-lg-0"><a href="https://githubstatus.com/" data-ga-click="Footer, go to status, text:status">Status</a></li>
  1175. <li><a data-ga-click="Footer, go to help, text:help" href="https://docs.github.com">Help</a></li>
  1176. </ul>
  1177. <a aria-label="Homepage" title="GitHub" class="footer-octicon d-none d-lg-block mx-lg-4" href="https://github.com">
  1178. <svg height="24" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="24" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path></svg>
  1179. </a>
  1180. <ul class="list-style-none d-flex flex-wrap col-12 col-lg-5 flex-justify-center flex-lg-justify-between mb-2 mb-lg-0">
  1181. <li class="mr-3 mr-lg-0"><a data-ga-click="Footer, go to contact, text:contact" href="https://github.com/contact">Contact GitHub</a></li>
  1182. <li class="mr-3 mr-lg-0"><a href="https://github.com/pricing" data-ga-click="Footer, go to Pricing, text:Pricing">Pricing</a></li>
  1183. <li class="mr-3 mr-lg-0"><a href="https://docs.github.com" data-ga-click="Footer, go to api, text:api">API</a></li>
  1184. <li class="mr-3 mr-lg-0"><a href="https://services.github.com" data-ga-click="Footer, go to training, text:training">Training</a></li>
  1185. <li class="mr-3 mr-lg-0"><a href="https://github.blog" data-ga-click="Footer, go to blog, text:blog">Blog</a></li>
  1186. <li><a data-ga-click="Footer, go to about, text:about" href="https://github.com/about">About</a></li>
  1187. </ul>
  1188. </div>
  1189. <div class="d-flex flex-justify-center pb-6">
  1190. <span class="f6 text-gray-light"></span>
  1191. </div>
  1192. </div>
  1193. <div id="ajax-error-message" class="ajax-error-message flash flash-error">
  1194. <svg class="octicon octicon-alert" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path></svg>
  1195. <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error">
  1196. <svg class="octicon octicon-x" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path></svg>
  1197. </button>
  1198. You can’t perform that action at this time.
  1199. </div>
  1200. <div class="js-stale-session-flash flash flash-warn flash-banner" hidden
  1201. >
  1202. <svg class="octicon octicon-alert" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path></svg>
  1203. <span class="js-stale-session-flash-signed-in" hidden>You signed in with another tab or window. <a href="">Reload</a> to refresh your session.</span>
  1204. <span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a href="">Reload</a> to refresh your session.</span>
  1205. </div>
  1206. <template id="site-details-dialog">
  1207. <details class="details-reset details-overlay details-overlay-dark lh-default text-gray-dark hx_rsm" open>
  1208. <summary role="button" aria-label="Close dialog"></summary>
  1209. <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal">
  1210. <button class="Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0" type="button" aria-label="Close dialog" data-close-dialog>
  1211. <svg class="octicon octicon-x" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path></svg>
  1212. </button>
  1213. <div class="octocat-spinner my-6 js-details-dialog-spinner"></div>
  1214. </details-dialog>
  1215. </details>
  1216. </template>
  1217. <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;" tabindex="0">
  1218. <div class="Popover-message Popover-message--bottom-left Popover-message--large Box box-shadow-large" style="width:360px;">
  1219. </div>
  1220. </div>
  1221. </body>
  1222. </html>