€• IŒsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ)/translations/zh_CN/security/secrets/coco”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/zh_TW/security/secrets/coco”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/it_IT/security/secrets/coco”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/ja_JP/security/secrets/coco”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/ko_KR/security/secrets/coco”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/sp_SP/security/secrets/coco”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…””}”hh£sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1h¡hhhžhhŸŒC/var/lib/git/docbuild/linux/Documentation/security/secrets/coco.rst”h KubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒConfidential Computing secrets”h]”hŒConfidential Computing secrets”…””}”(hh»hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hh¶hžhhŸh³h KubhŒ paragraph”“”)”}”(hŒ­This document describes how Confidential Computing secret injection is handled from the firmware to the operating system, in the EFI driver and the efi_secret kernel module.”h]”hŒ­This document describes how Confidential Computing secret injection is handled from the firmware to the operating system, in the EFI driver and the efi_secret kernel module.”…””}”(hhËhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khh¶hžhubhµ)”}”(hhh]”(hº)”}”(hŒ Introduction”h]”hŒ Introduction”…””}”(hhÜhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hhÙhžhhŸh³h K ubhÊ)”}”(hX/Confidential Computing (coco) hardware such as AMD SEV (Secure Encrypted Virtualization) allows guest owners to inject secrets into the VMs memory without the host/hypervisor being able to read them. In SEV, secret injection is performed early in the VM launch process, before the guest starts running.”h]”hX/Confidential Computing (coco) hardware such as AMD SEV (Secure Encrypted Virtualization) allows guest owners to inject secrets into the VMs memory without the host/hypervisor being able to read them. In SEV, secret injection is performed early in the VM launch process, before the guest starts running.”…””}”(hhêhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KhhÙhžhubhÊ)”}”(hŒbThe efi_secret kernel module allows userspace applications to access these secrets via securityfs.”h]”hŒbThe efi_secret kernel module allows userspace applications to access these secrets via securityfs.”…””}”(hhøhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KhhÙhžhubeh}”(h]”Œ introduction”ah ]”h"]”Œ introduction”ah$]”h&]”uh1h´hh¶hžhhŸh³h K ubhµ)”}”(hhh]”(hº)”}”(hŒSecret data flow”h]”hŒSecret data flow”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjhžhhŸh³h KubhÊ)”}”(hXŠThe guest firmware may reserve a designated memory area for secret injection, and publish its location (base GPA and length) in the EFI configuration table under a ``LINUX_EFI_COCO_SECRET_AREA_GUID`` entry (``adf956ad-e98c-484c-ae11-b51c7d336447``). This memory area should be marked by the firmware as ``EFI_RESERVED_TYPE``, and therefore the kernel should not be use it for its own purposes.”h]”(hŒ¤The guest firmware may reserve a designated memory area for secret injection, and publish its location (base GPA and length) in the EFI configuration table under a ”…””}”(hjhžhhŸNh NubhŒliteral”“”)”}”(hŒ#``LINUX_EFI_COCO_SECRET_AREA_GUID``”h]”hŒLINUX_EFI_COCO_SECRET_AREA_GUID”…””}”(hj)hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjubhŒ entry (”…””}”(hjhžhhŸNh Nubj()”}”(hŒ(``adf956ad-e98c-484c-ae11-b51c7d336447``”h]”hŒ$adf956ad-e98c-484c-ae11-b51c7d336447”…””}”(hj;hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjubhŒ9). This memory area should be marked by the firmware as ”…””}”(hjhžhhŸNh Nubj()”}”(hŒ``EFI_RESERVED_TYPE``”h]”hŒEFI_RESERVED_TYPE”…””}”(hjMhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjubhŒE, and therefore the kernel should not be use it for its own purposes.”…””}”(hjhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KhjhžhubhÊ)”}”(hX”During the VM's launch, the virtual machine manager may inject a secret to that area. In AMD SEV and SEV-ES this is performed using the ``KVM_SEV_LAUNCH_SECRET`` command (see [sev]_). The structure of the injected Guest Owner secret data should be a GUIDed table of secret values; the binary format is described in ``drivers/virt/coco/efi_secret/efi_secret.c`` under "Structure of the EFI secret area".”h]”(hŒ‹During the VM’s launch, the virtual machine manager may inject a secret to that area. In AMD SEV and SEV-ES this is performed using the ”…””}”(hjehžhhŸNh Nubj()”}”(hŒ``KVM_SEV_LAUNCH_SECRET``”h]”hŒKVM_SEV_LAUNCH_SECRET”…””}”(hjmhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjeubhŒ command (see ”…””}”(hjehžhhŸNh Nubh)”}”(hŒsev”h]”hŒinline”“”)”}”(hjh]”hŒ[sev]”…””}”(hj…hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjubah}”(h]”Œid1”ah ]”h"]”h$]”h&]”Œ refdomain”Œcitation”Œreftype”Œref”Œ reftarget”jŒrefwarn”ˆŒsupport_smartquotes”‰uh1hhŸh³h K#hjehžhubhŒ‡). The structure of the injected Guest Owner secret data should be a GUIDed table of secret values; the binary format is described in ”…””}”(hjehžhhŸNh Nubj()”}”(hŒ-``drivers/virt/coco/efi_secret/efi_secret.c``”h]”hŒ)drivers/virt/coco/efi_secret/efi_secret.c”…””}”(hj¤hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjeubhŒ. under “Structure of the EFI secret areaâ€.”…””}”(hjehžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K#hjhžhubhÊ)”}”(hXDOn kernel start, the kernel's EFI driver saves the location of the secret area (taken from the EFI configuration table) in the ``efi.coco_secret`` field. Later it checks if the secret area is populated: it maps the area and checks whether its content begins with ``EFI_SECRET_TABLE_HEADER_GUID`` (``1e74f542-71dd-4d66-963e-ef4287ff173b``). If the secret area is populated, the EFI driver will autoload the efi_secret kernel module, which exposes the secrets to userspace applications via securityfs. The details of the efi_secret filesystem interface are in [secrets-coco-abi]_.”h]”(hŒOn kernel start, the kernel’s EFI driver saves the location of the secret area (taken from the EFI configuration table) in the ”…””}”(hj¼hžhhŸNh Nubj()”}”(hŒ``efi.coco_secret``”h]”hŒefi.coco_secret”…””}”(hjÄhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj¼ubhŒu field. Later it checks if the secret area is populated: it maps the area and checks whether its content begins with ”…””}”(hj¼hžhhŸNh Nubj()”}”(hŒ ``EFI_SECRET_TABLE_HEADER_GUID``”h]”hŒEFI_SECRET_TABLE_HEADER_GUID”…””}”(hjÖhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj¼ubhŒ (”…””}”(hj¼hžhhŸNh Nubj()”}”(hŒ(``1e74f542-71dd-4d66-963e-ef4287ff173b``”h]”hŒ$1e74f542-71dd-4d66-963e-ef4287ff173b”…””}”(hjèhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hj¼ubhŒß). If the secret area is populated, the EFI driver will autoload the efi_secret kernel module, which exposes the secrets to userspace applications via securityfs. The details of the efi_secret filesystem interface are in ”…””}”(hj¼hžhhŸNh Nubh)”}”(hŒsecrets-coco-abi”h]”j„)”}”(hjüh]”hŒ[secrets-coco-abi]”…””}”(hjþhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhjúubah}”(h]”Œid2”ah ]”h"]”h$]”h&]”Œ refdomain”jšŒreftype”jœŒ reftarget”jüŒrefwarn”ˆŒsupport_smartquotes”‰uh1hhŸh³h K*hj¼hžhubhŒ.”…””}”(hj¼hžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K*hjhžhubeh}”(h]”Œsecret-data-flow”ah ]”h"]”Œsecret data flow”ah$]”h&]”uh1h´hh¶hžhhŸh³h Kubhµ)”}”(hhh]”(hº)”}”(hŒApplication usage example”h]”hŒApplication usage example”…””}”(hj,hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hj)hžhhŸh³h K5ubhÊ)”}”(hXHConsider a guest performing computations on encrypted files. The Guest Owner provides the decryption key (= secret) using the secret injection mechanism. The guest application reads the secret from the efi_secret filesystem and proceeds to decrypt the files into memory and then performs the needed computations on the content.”h]”hXHConsider a guest performing computations on encrypted files. The Guest Owner provides the decryption key (= secret) using the secret injection mechanism. The guest application reads the secret from the efi_secret filesystem and proceeds to decrypt the files into memory and then performs the needed computations on the content.”…””}”(hj:hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K7hj)hžhubhÊ)”}”(hX8In this example, the host can't read the files from the disk image because they are encrypted. Host can't read the decryption key because it is passed using the secret injection mechanism (= secure channel). Host can't read the decrypted content from memory because it's a confidential (memory-encrypted) guest.”h]”hX@In this example, the host can’t read the files from the disk image because they are encrypted. Host can’t read the decryption key because it is passed using the secret injection mechanism (= secure channel). Host can’t read the decrypted content from memory because it’s a confidential (memory-encrypted) guest.”…””}”(hjHhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K=hj)hžhubhÊ)”}”(hŒŽHere is a simple example for usage of the efi_secret module in a guest to which an EFI secret area with 4 secrets was injected during launch::”h]”hŒHere is a simple example for usage of the efi_secret module in a guest to which an EFI secret area with 4 secrets was injected during launch:”…””}”(hjVhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KChj)hžhubhŒ literal_block”“”)”}”(hX—# ls -la /sys/kernel/security/secrets/coco total 0 drwxr-xr-x 2 root root 0 Jun 28 11:54 . drwxr-xr-x 3 root root 0 Jun 28 11:54 .. -r--r----- 1 root root 0 Jun 28 11:54 736870e5-84f0-4973-92ec-06879ce3da0b -r--r----- 1 root root 0 Jun 28 11:54 83c83f7f-1356-4975-8b7e-d3a0b54312c6 -r--r----- 1 root root 0 Jun 28 11:54 9553f55d-3da2-43ee-ab5d-ff17f78864d2 -r--r----- 1 root root 0 Jun 28 11:54 e6f5a162-d67f-4750-a67c-5d065f2a9910 # hd /sys/kernel/security/secrets/coco/e6f5a162-d67f-4750-a67c-5d065f2a9910 00000000 74 68 65 73 65 2d 61 72 65 2d 74 68 65 2d 6b 61 |these-are-the-ka| 00000010 74 61 2d 73 65 63 72 65 74 73 00 01 02 03 04 05 |ta-secrets......| 00000020 06 07 |..| 00000022 # rm /sys/kernel/security/secrets/coco/e6f5a162-d67f-4750-a67c-5d065f2a9910 # ls -la /sys/kernel/security/secrets/coco total 0 drwxr-xr-x 2 root root 0 Jun 28 11:55 . drwxr-xr-x 3 root root 0 Jun 28 11:54 .. -r--r----- 1 root root 0 Jun 28 11:54 736870e5-84f0-4973-92ec-06879ce3da0b -r--r----- 1 root root 0 Jun 28 11:54 83c83f7f-1356-4975-8b7e-d3a0b54312c6 -r--r----- 1 root root 0 Jun 28 11:54 9553f55d-3da2-43ee-ab5d-ff17f78864d2”h]”hX—# ls -la /sys/kernel/security/secrets/coco total 0 drwxr-xr-x 2 root root 0 Jun 28 11:54 . drwxr-xr-x 3 root root 0 Jun 28 11:54 .. -r--r----- 1 root root 0 Jun 28 11:54 736870e5-84f0-4973-92ec-06879ce3da0b -r--r----- 1 root root 0 Jun 28 11:54 83c83f7f-1356-4975-8b7e-d3a0b54312c6 -r--r----- 1 root root 0 Jun 28 11:54 9553f55d-3da2-43ee-ab5d-ff17f78864d2 -r--r----- 1 root root 0 Jun 28 11:54 e6f5a162-d67f-4750-a67c-5d065f2a9910 # hd /sys/kernel/security/secrets/coco/e6f5a162-d67f-4750-a67c-5d065f2a9910 00000000 74 68 65 73 65 2d 61 72 65 2d 74 68 65 2d 6b 61 |these-are-the-ka| 00000010 74 61 2d 73 65 63 72 65 74 73 00 01 02 03 04 05 |ta-secrets......| 00000020 06 07 |..| 00000022 # rm /sys/kernel/security/secrets/coco/e6f5a162-d67f-4750-a67c-5d065f2a9910 # ls -la /sys/kernel/security/secrets/coco total 0 drwxr-xr-x 2 root root 0 Jun 28 11:55 . drwxr-xr-x 3 root root 0 Jun 28 11:54 .. -r--r----- 1 root root 0 Jun 28 11:54 736870e5-84f0-4973-92ec-06879ce3da0b -r--r----- 1 root root 0 Jun 28 11:54 83c83f7f-1356-4975-8b7e-d3a0b54312c6 -r--r----- 1 root root 0 Jun 28 11:54 9553f55d-3da2-43ee-ab5d-ff17f78864d2”…””}”hjfsbah}”(h]”h ]”h"]”h$]”h&]”h±h²uh1jdhŸh³h KFhj)hžhubeh}”(h]”Œapplication-usage-example”ah ]”h"]”Œapplication usage example”ah$]”h&]”uh1h´hh¶hžhhŸh³h K5ubhµ)”}”(hhh]”(hº)”}”(hŒ References”h]”hŒ References”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hj|hžhhŸh³h KaubhÊ)”}”(hŒLSee [sev-api-spec]_ for more info regarding SEV ``LAUNCH_SECRET`` operation.”h]”(hŒSee ”…””}”(hjhžhhŸNh Nubh)”}”(hŒ sev-api-spec”h]”j„)”}”(hj—h]”hŒ[sev-api-spec]”…””}”(hj™hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jƒhj•ubah}”(h]”Œid3”ah ]”h"]”h$]”h&]”Œ refdomain”jšŒreftype”jœŒ reftarget”j—Œrefwarn”ˆŒsupport_smartquotes”‰uh1hhŸh³h KchjhžhubhŒ for more info regarding SEV ”…””}”(hjhžhhŸNh Nubj()”}”(hŒ``LAUNCH_SECRET``”h]”hŒ LAUNCH_SECRET”…””}”(hj¶hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j'hjubhŒ operation.”…””}”(hjhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Kchj|hžhubhjš“”)”}”(hŒ4Documentation/virt/kvm/x86/amd-memory-encryption.rst”h]”(hŒlabel”“”)”}”(hŒsev”h]”hŒsev”…””}”(hjÕhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”Œsupport_smartquotes”‰uh1jÓhjÏubhÊ)”}”(hjÑh]”hŒ4Documentation/virt/kvm/x86/amd-memory-encryption.rst”…””}”(hjähžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KehjÏubeh}”(h]”Œsev”ah ]”h"]”Œsev”ah$]”h&]”j”aŒdocname”Œsecurity/secrets/coco”uh1jšhŸh³h Kehj|hžhŒresolved”KubjÎ)”}”(hŒ1Documentation/ABI/testing/securityfs-secrets-coco”h]”(jÔ)”}”(hŒsecrets-coco-abi”h]”hŒsecrets-coco-abi”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”jã‰uh1jÓhjüubhÊ)”}”(hjþh]”hŒ1Documentation/ABI/testing/securityfs-secrets-coco”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Kfhjüubeh}”(h]”Œsecrets-coco-abi”ah ]”h"]”Œsecrets-coco-abi”ah$]”h&]”j ajùjúuh1jšhŸh³h Kfhj|hžhjûKubjÎ)”}”(hŒLhttps://www.amd.com/system/files/TechDocs/55766_SEV-KM_API_Specification.pdf”h]”(jÔ)”}”(hŒ sev-api-spec”h]”hŒ sev-api-spec”…””}”(hj'hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”jã‰uh1jÓhj#ubhÊ)”}”(hj%h]”hŒ reference”“”)”}”(hj%h]”hŒLhttps://www.amd.com/system/files/TechDocs/55766_SEV-KM_API_Specification.pdf”…””}”(hj:hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”j%uh1j8hj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Kghj#ubeh}”(h]”Œ sev-api-spec”ah ]”h"]”Œ sev-api-spec”ah$]”h&]”j¨ajùjúuh1jšhŸh³h Kghj|hžhjûKubeh}”(h]”Œ references”ah ]”h"]”Œ references”ah$]”h&]”uh1h´hh¶hžhhŸh³h Kaubeh}”(h]”Œconfidential-computing-secrets”ah ]”h"]”Œconfidential computing secrets”ah$]”h&]”uh1h´hhhžhhŸh³h Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”h³uh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(h¹NŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j‰Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”h³Œ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”(Œsev”]”hŒcitation_reference”“”)”}”(hŒ[sev]_”h]”hŒsev”…””}”hjÍsbah}”(h]”j”ah ]”h"]”h$]”h&]”Œrefid”jóuh1jËhjejûKubaŒsecrets-coco-abi”]”jÌ)”}”(hŒ[secrets-coco-abi]_”h]”hŒsecrets-coco-abi”…””}”hjÞsbah}”(h]”j ah ]”h"]”h$]”h&]”jÛjuh1jËhj¼jûKubaŒ sev-api-spec”]”jÌ)”}”(hŒ[sev-api-spec]_”h]”hŒ sev-api-spec”…””}”hjîsbah}”(h]”j¨ah ]”h"]”h$]”h&]”jÛjPuh1jËhjjûKubauŒrefids”}”Œnameids”}”(jcj`j jj&j#jyjvj[jXjöjój jjSjPuŒ nametypes”}”(jc‰j ‰j&‰jy‰j[‰jöˆj ˆjSˆuh}”(j`h¶jhÙj#jj”jÍj jÞjvj)jXj|j¨jîjójÏjjüjPj#uŒ footnote_refs”}”Œ citation_refs”}”(jÉ]”jÍajÜ]”jÞajì]”jîauŒ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”(jÏjüj#eŒautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”j—Ks…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nhžhub.