[{"data":1,"prerenderedAt":1093},["ShallowReactive",2],{"navigation":3,"-jwt-jwe-algorithms":167,"-jwt-jwe-algorithms-surround":1090},[4,22,78,106,141,148],{"title":5,"path":6,"stem":7,"children":8},"Introduction","\u002Fgetting-started","0.Getting-Started\u002F0.index",[9,10,14,18],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Installation","\u002Fgetting-started\u002Finstallation","0.Getting-Started\u002F1.installation",{"title":15,"path":16,"stem":17},"Quickstart","\u002Fgetting-started\u002Fquickstart","0.Getting-Started\u002F2.quickstart",{"title":19,"path":20,"stem":21},"Core concepts","\u002Fgetting-started\u002Fcore-concepts","0.Getting-Started\u002F3.core-concepts",{"title":23,"path":24,"stem":25,"children":26,"icon":28},"JWT","\u002Fjwt","1.JWT\u002F0.index",[27,29,52],{"title":23,"path":24,"stem":25,"icon":28},"i-carbon-certificate",{"title":30,"path":31,"stem":32,"children":33,"icon":35},"JWS","\u002Fjwt\u002Fjws","1.JWT\u002F1.JWS\u002F0.index",[34,36,40,44,48],{"title":30,"path":31,"stem":32,"icon":35},"i-carbon-document-signed",{"title":37,"path":38,"stem":39},"Signing","\u002Fjwt\u002Fjws\u002Fsigning","1.JWT\u002F1.JWS\u002F1.signing",{"title":41,"path":42,"stem":43},"Verifying","\u002Fjwt\u002Fjws\u002Fverifying","1.JWT\u002F1.JWS\u002F2.verifying",{"title":45,"path":46,"stem":47},"Multi-signature","\u002Fjwt\u002Fjws\u002Fmulti-signature","1.JWT\u002F1.JWS\u002F3.multi-signature",{"title":49,"path":50,"stem":51},"Algorithms","\u002Fjwt\u002Fjws\u002Falgorithms","1.JWT\u002F1.JWS\u002F4.algorithms",{"title":53,"path":54,"stem":55,"children":56,"icon":58},"JWE","\u002Fjwt\u002Fjwe","1.JWT\u002F2.JWE\u002F0.index",[57,59,63,67,71,75],{"title":53,"path":54,"stem":55,"icon":58},"i-carbon-locked",{"title":60,"path":61,"stem":62},"Encrypting","\u002Fjwt\u002Fjwe\u002Fencrypting","1.JWT\u002F2.JWE\u002F1.encrypting",{"title":64,"path":65,"stem":66},"Decrypting","\u002Fjwt\u002Fjwe\u002Fdecrypting","1.JWT\u002F2.JWE\u002F2.decrypting",{"title":68,"path":69,"stem":70},"Multi-recipient","\u002Fjwt\u002Fjwe\u002Fmulti-recipient","1.JWT\u002F2.JWE\u002F3.multi-recipient",{"title":72,"path":73,"stem":74},"ECDH-ES and end-to-end encryption","\u002Fjwt\u002Fjwe\u002Fecdh-es","1.JWT\u002F2.JWE\u002F4.ecdh-es",{"title":49,"path":76,"stem":77},"\u002Fjwt\u002Fjwe\u002Falgorithms","1.JWT\u002F2.JWE\u002F5.algorithms",{"title":79,"path":80,"stem":81,"children":82,"icon":84},"Examples","\u002Fexamples","10.Examples\u002F0.index",[83,85,90,94,98,102],{"title":79,"path":80,"stem":81,"icon":84},"i-carbon-code-reference",{"title":86,"path":87,"stem":88,"icon":89},"Authentication basics","\u002Fexamples\u002Fauthentication-basics","10.Examples\u002F1.authentication-basics","i-lucide-code",{"title":91,"path":92,"stem":93,"icon":89},"Consuming a JWKS endpoint","\u002Fexamples\u002Fjwks-endpoint","10.Examples\u002F2.jwks-endpoint",{"title":95,"path":96,"stem":97,"icon":89},"Refresh token pattern","\u002Fexamples\u002Frefresh-token-pattern","10.Examples\u002F3.refresh-token-pattern",{"title":99,"path":100,"stem":101,"icon":89},"End-to-end encryption","\u002Fexamples\u002Fend-to-end-encryption","10.Examples\u002F4.end-to-end-encryption",{"title":103,"path":104,"stem":105,"icon":89},"Signed receipts","\u002Fexamples\u002Fsigned-receipts","10.Examples\u002F5.signed-receipts",{"title":107,"path":108,"stem":109,"children":110,"icon":112},"JWK","\u002Fjwk","2.JWK\u002F0.index",[111,113,117,121,125,129,133,137],{"title":107,"path":108,"stem":109,"icon":112},"i-carbon-two-factor-authentication",{"title":114,"path":115,"stem":116},"Generating keys","\u002Fjwk\u002Fgenerating","2.JWK\u002F1.generating",{"title":118,"path":119,"stem":120},"Importing and exporting","\u002Fjwk\u002Fimport-export","2.JWK\u002F2.import-export",{"title":122,"path":123,"stem":124},"PEM conversion","\u002Fjwk\u002Fpem","2.JWK\u002F3.pem",{"title":126,"path":127,"stem":128},"Key wrapping","\u002Fjwk\u002Fwrapping","2.JWK\u002F4.wrapping",{"title":130,"path":131,"stem":132},"Password derivation","\u002Fjwk\u002Fpassword-derivation","2.JWK\u002F5.password-derivation",{"title":134,"path":135,"stem":136},"JWK Sets","\u002Fjwk\u002Fjwk-sets","2.JWK\u002F6.jwk-sets",{"title":138,"path":139,"stem":140},"JWK cache","\u002Fjwk\u002Fcache","2.JWK\u002F7.cache",{"title":142,"path":143,"stem":144,"children":145,"icon":147},"Utilities","\u002Futilities","3.Utilities\u002F0.index",[146],{"title":142,"path":143,"stem":144,"icon":147},"i-carbon-tool-box",{"title":149,"path":150,"stem":151,"children":152,"icon":154},"Adapters","\u002Fadapters","99.Adapters\u002F0.index",[153,155,159,163],{"title":149,"path":150,"stem":151,"icon":154},"i-carbon-plug",{"title":156,"path":157,"stem":158},"H3 sessions","\u002Fadapters\u002Fh3-sessions","99.Adapters\u002F1.h3-sessions",{"title":160,"path":161,"stem":162},"Lifecycle hooks","\u002Fadapters\u002Fhooks","99.Adapters\u002F2.hooks",{"title":164,"path":165,"stem":166},"Lower-level functions","\u002Fadapters\u002Flower-level","99.Adapters\u002F3.lower-level",{"id":168,"title":49,"body":169,"description":529,"extension":1085,"meta":1086,"navigation":1087,"path":76,"seo":1088,"stem":77,"__hash__":1089},"content\u002F1.JWT\u002F2.JWE\u002F5.algorithms.md",{"type":170,"value":171,"toc":1068},"minimark",[172,177,186,207,218,226,386,391,419,425,479,482,511,517,523,591,597,627,636,673,682,696,701,707,721,731,745,751,762,887,893,911,915,918,935,964,970,974,983,1022,1034,1038,1064],[173,174,176],"h1",{"id":175},"jwe-algorithms","JWE algorithms",[178,179,180,181,185],"p",{},"A JWE's header carries ",[182,183,184],"strong",{},"two"," algorithm identifiers:",[187,188,189,199],"ul",{},[190,191,192,198],"li",{},[182,193,194],{},[195,196,197],"code",{},"alg"," — how the Content Encryption Key (CEK) is delivered.",[190,200,201,206],{},[182,202,203],{},[195,204,205],{},"enc"," — which cipher encrypts the payload with the CEK.",[178,208,209,210,217],{},"Both are defined in ",[211,212,216],"a",{"href":213,"rel":214},"https:\u002F\u002Fwww.rfc-editor.org\u002Frfc\u002Frfc7518",[215],"nofollow","RFC 7518",".",[219,220,222,223,225],"h2",{"id":221},"key-management-alg","Key management (",[195,224,197],{},")",[227,228,229,248],"table",{},[230,231,232],"thead",{},[233,234,235,239,242,245],"tr",{},[236,237,238],"th",{},"Family",[236,240,241],{},"Identifiers",[236,243,244],{},"Key type",[236,246,247],{},"Notes",[249,250,251,268,297,319,340,362],"tbody",{},[233,252,253,257,262,265],{},[254,255,256],"td",{},"Direct",[254,258,259],{},[195,260,261],{},"dir",[254,263,264],{},"Symmetric — the key IS the CEK",[254,266,267],{},"Smallest token; requires pre-shared CEK.",[233,269,270,273,287,290],{},[254,271,272],{},"RSA-OAEP",[254,274,275,277,278,277,281,277,284],{},[195,276,272],{},", ",[195,279,280],{},"RSA-OAEP-256",[195,282,283],{},"RSA-OAEP-384",[195,285,286],{},"RSA-OAEP-512",[254,288,289],{},"RSA keypair",[254,291,292,293,296],{},"Public-key encryption. Prefer ",[195,294,295],{},"-256"," or higher for new keys.",[233,298,299,302,313,316],{},[254,300,301],{},"AES Key Wrap",[254,303,304,277,307,277,310],{},[195,305,306],{},"A128KW",[195,308,309],{},"A192KW",[195,311,312],{},"A256KW",[254,314,315],{},"Symmetric AES",[254,317,318],{},"Wraps the CEK with an AES key you already share.",[233,320,321,324,335,337],{},[254,322,323],{},"AES-GCM Key Wrap",[254,325,326,277,329,277,332],{},[195,327,328],{},"A128GCMKW",[195,330,331],{},"A192GCMKW",[195,333,334],{},"A256GCMKW",[254,336,315],{},[254,338,339],{},"Authenticated variant of AES Key Wrap.",[233,341,342,345,356,359],{},[254,343,344],{},"PBES2",[254,346,347,277,350,277,353],{},[195,348,349],{},"PBES2-HS256+A128KW",[195,351,352],{},"PBES2-HS384+A192KW",[195,354,355],{},"PBES2-HS512+A256KW",[254,357,358],{},"Password",[254,360,361],{},"Password-based; uses PBKDF2 + AES-KW.",[233,363,364,367,380,383],{},[254,365,366],{},"ECDH-ES",[254,368,369,277,371,277,374,277,377],{},[195,370,366],{},[195,372,373],{},"ECDH-ES+A128KW",[195,375,376],{},"ECDH-ES+A192KW",[195,378,379],{},"ECDH-ES+A256KW",[254,381,382],{},"EC or OKP keypair",[254,384,385],{},"Diffie-Hellman. Ephemeral key generated per message.",[387,388,390],"h3",{"id":389},"deprecated-avoid","Deprecated \u002F avoid",[187,392,393,406],{},[190,394,395,398,399,402,403,405],{},[195,396,397],{},"RSA1_5"," (RSA PKCS#1 v1.5) — ",[182,400,401],{},"not supported by unjwt",". Vulnerable to Bleichenbacher attacks. Use ",[195,404,280],{}," or higher.",[190,407,408,411,412,416,417,217],{},[195,409,410],{},"A128CBC-HS256"," as a ",[413,414,415],"em",{},"key wrap"," — exists only as a historical content-encryption alg, not listed here as ",[195,418,197],{},[219,420,422,423,225],{"id":421},"content-encryption-enc","Content encryption (",[195,424,205],{},[227,426,427,437],{},[230,428,429],{},[233,430,431,433,435],{},[236,432,238],{},[236,434,241],{},[236,436,247],{},[249,438,439,461],{},[233,440,441,444,455],{},[254,442,443],{},"AES-GCM",[254,445,446,277,449,277,452],{},[195,447,448],{},"A128GCM",[195,450,451],{},"A192GCM",[195,453,454],{},"A256GCM",[254,456,457,458,460],{},"AEAD. Fast, modern. Prefer ",[195,459,454],{}," for new keys.",[233,462,463,466,476],{},[254,464,465],{},"AES-CBC + HMAC-SHA2",[254,467,468,277,470,277,473],{},[195,469,410],{},[195,471,472],{},"A192CBC-HS384",[195,474,475],{},"A256CBC-HS512",[254,477,478],{},"Composite construction. Required for some interop.",[178,480,481],{},"Both are authenticated (they fail decryption if the ciphertext is modified), but AES-GCM does it in one pass while AES-CBC+HMAC does encryption and authentication separately (bigger CEK, more bytes in the token).",[178,483,484,487,488,491,492,494,495,497,498,500,501,504,505,507,508,510],{},[182,485,486],{},"Defaults for unjwt:"," single-recipient ",[195,489,490],{},"encrypt()"," falls back to ",[195,493,448],{}," when ",[195,496,205],{}," is not specified and the JWK carries no ",[195,499,205],{}," hint; ",[195,502,503],{},"encryptMulti()"," defaults to ",[195,506,454],{},". Use ",[195,509,410],{}," only when a counterparty requires it.",[219,512,514,515],{"id":513},"choosing-alg","Choosing ",[195,516,197],{},[178,518,519,522],{},[182,520,521],{},"You control both sides of the channel"," — use a symmetric key.",[524,525,530],"pre",{"className":526,"code":527,"language":528,"meta":529,"style":529},"language-ts shiki shiki-themes github-light github-dark github-dark","const aesKey = await generateJWK(\"A256KW\");\n\u002F\u002F Same aesKey encrypts and decrypts. Share securely out-of-band.\nconst token = await encrypt(payload, aesKey);\n","ts","",[195,531,532,566,573],{"__ignoreMap":529},[533,534,537,541,545,548,551,555,559,563],"span",{"class":535,"line":536},"line",1,[533,538,540],{"class":539},"so5gQ","const",[533,542,544],{"class":543},"suiK_"," aesKey",[533,546,547],{"class":539}," =",[533,549,550],{"class":539}," await",[533,552,554],{"class":553},"shcOC"," generateJWK",[533,556,558],{"class":557},"slsVL","(",[533,560,562],{"class":561},"sfrk1","\"A256KW\"",[533,564,565],{"class":557},");\n",[533,567,569],{"class":535,"line":568},2,[533,570,572],{"class":571},"sCsY4","\u002F\u002F Same aesKey encrypts and decrypts. Share securely out-of-band.\n",[533,574,576,578,581,583,585,588],{"class":535,"line":575},3,[533,577,540],{"class":539},[533,579,580],{"class":543}," token",[533,582,547],{"class":539},[533,584,550],{"class":539},[533,586,587],{"class":553}," encrypt",[533,589,590],{"class":557},"(payload, aesKey);\n",[178,592,593,596],{},[182,594,595],{},"The encryption key is a password (human-typed or human-remembered)"," — let unjwt use PBES2:",[524,598,600],{"className":526,"code":599,"language":528,"meta":529,"style":529},"const token = await encrypt(payload, \"my-strong-password\");\n\u002F\u002F Uses PBES2-HS256+A128KW under the hood with p2c=600_000\n",[195,601,602,622],{"__ignoreMap":529},[533,603,604,606,608,610,612,614,617,620],{"class":535,"line":536},[533,605,540],{"class":539},[533,607,580],{"class":543},[533,609,547],{"class":539},[533,611,550],{"class":539},[533,613,587],{"class":553},[533,615,616],{"class":557},"(payload, ",[533,618,619],{"class":561},"\"my-strong-password\"",[533,621,565],{"class":557},[533,623,624],{"class":535,"line":568},[533,625,626],{"class":571},"\u002F\u002F Uses PBES2-HS256+A128KW under the hood with p2c=600_000\n",[178,628,629,632,633,635],{},[182,630,631],{},"Recipients can't share a symmetric key"," (multi-party systems, federated identity) — use a public-key scheme. ",[195,634,379],{}," is the modern default:",[524,637,639],{"className":526,"code":638,"language":528,"meta":529,"style":529},"const { publicKey, privateKey } = await generateJWK(\"ECDH-ES+A256KW\");\n",[195,640,641],{"__ignoreMap":529},[533,642,643,645,648,651,653,656,659,662,664,666,668,671],{"class":535,"line":536},[533,644,540],{"class":539},[533,646,647],{"class":557}," { ",[533,649,650],{"class":543},"publicKey",[533,652,277],{"class":557},[533,654,655],{"class":543},"privateKey",[533,657,658],{"class":557}," } ",[533,660,661],{"class":539},"=",[533,663,550],{"class":539},[533,665,554],{"class":553},[533,667,558],{"class":557},[533,669,670],{"class":561},"\"ECDH-ES+A256KW\"",[533,672,565],{"class":557},[178,674,675,678,679,681],{},[182,676,677],{},"Interop with a consumer that only supports RSA"," — ",[195,680,280],{}," (or higher).",[178,683,684,687,688,690,691,695],{},[182,685,686],{},"You already have a pre-shared CEK"," (e.g. derived from an out-of-band exchange) — use ",[195,689,261],{},". See ",[211,692,694],{"href":693},"#direct-encryption-dir","Direct encryption"," below.",[219,697,514,699],{"id":698},"choosing-enc",[195,700,205],{},[178,702,703,704,706],{},"In 2026 the answer is almost always ",[195,705,454],{},":",[187,708,709,712,718],{},[190,710,711],{},"It's AEAD (one pass; smaller token).",[190,713,714,717],{},[195,715,716],{},"256"," is the safe default for new keys.",[190,719,720],{},"AES-GCM is hardware-accelerated on every modern CPU.",[178,722,723,724,726,727,730],{},"Pick ",[195,725,410],{}," ",[182,728,729],{},"only"," if:",[187,732,733,736,742],{},[190,734,735],{},"Counterparty requires it for interop.",[190,737,738,739,741],{},"You're pairing it explicitly with ",[195,740,349],{}," for classical interop.",[190,743,744],{},"Your platform lacks AES-GCM hardware support (rare).",[219,746,748,749,225],{"id":747},"direct-encryption-dir","Direct encryption (",[195,750,261],{},[178,752,753,754,757,758,761],{},"With ",[195,755,756],{},"alg = \"dir\"",", the ",[195,759,760],{},"encryptedKey"," segment of the token is empty — the recipient's key is the CEK. It's the smallest JWE possible but requires coordination.",[524,763,765],{"className":526,"code":764,"language":528,"meta":529,"style":529},"import { generateKey } from \"unjwt\u002Fjwk\";\n\n\u002F\u002F 1. Generate a CEK (must match `enc`)\nconst cek = await generateKey(\"A256GCM\"); \u002F\u002F CryptoKey with 256-bit random bytes\n\n\u002F\u002F 2. Both sides hold `cek`\nconst token = await encrypt({ secret: \"x\" }, cek, { alg: \"dir\", enc: \"A256GCM\" });\nconst { payload } = await decrypt(token, cek);\n",[195,766,767,784,790,795,821,826,832,865],{"__ignoreMap":529},[533,768,769,772,775,778,781],{"class":535,"line":536},[533,770,771],{"class":539},"import",[533,773,774],{"class":557}," { generateKey } ",[533,776,777],{"class":539},"from",[533,779,780],{"class":561}," \"unjwt\u002Fjwk\"",[533,782,783],{"class":557},";\n",[533,785,786],{"class":535,"line":568},[533,787,789],{"emptyLinePlaceholder":788},true,"\n",[533,791,792],{"class":535,"line":575},[533,793,794],{"class":571},"\u002F\u002F 1. Generate a CEK (must match `enc`)\n",[533,796,798,800,803,805,807,810,812,815,818],{"class":535,"line":797},4,[533,799,540],{"class":539},[533,801,802],{"class":543}," cek",[533,804,547],{"class":539},[533,806,550],{"class":539},[533,808,809],{"class":553}," generateKey",[533,811,558],{"class":557},[533,813,814],{"class":561},"\"A256GCM\"",[533,816,817],{"class":557},"); ",[533,819,820],{"class":571},"\u002F\u002F CryptoKey with 256-bit random bytes\n",[533,822,824],{"class":535,"line":823},5,[533,825,789],{"emptyLinePlaceholder":788},[533,827,829],{"class":535,"line":828},6,[533,830,831],{"class":571},"\u002F\u002F 2. Both sides hold `cek`\n",[533,833,835,837,839,841,843,845,848,851,854,857,860,862],{"class":535,"line":834},7,[533,836,540],{"class":539},[533,838,580],{"class":543},[533,840,547],{"class":539},[533,842,550],{"class":539},[533,844,587],{"class":553},[533,846,847],{"class":557},"({ secret: ",[533,849,850],{"class":561},"\"x\"",[533,852,853],{"class":557}," }, cek, { alg: ",[533,855,856],{"class":561},"\"dir\"",[533,858,859],{"class":557},", enc: ",[533,861,814],{"class":561},[533,863,864],{"class":557}," });\n",[533,866,868,870,872,875,877,879,881,884],{"class":535,"line":867},8,[533,869,540],{"class":539},[533,871,647],{"class":557},[533,873,874],{"class":543},"payload",[533,876,658],{"class":557},[533,878,661],{"class":539},[533,880,550],{"class":539},[533,882,883],{"class":553}," decrypt",[533,885,886],{"class":557},"(token, cek);\n",[178,888,889,890,892],{},"Use ",[195,891,261],{}," when:",[187,894,895,898,901],{},[190,896,897],{},"You're operating on a pre-shared CEK (e.g. derived from a session exchange).",[190,899,900],{},"You control both sides and want the smallest overhead.",[190,902,903,904,906,907,910],{},"Multi-recipient is out of scope — ",[195,905,261],{}," is ",[182,908,909],{},"forbidden"," in multi-recipient envelopes.",[219,912,914],{"id":913},"password-based-pbes2","Password-based (PBES2)",[178,916,917],{},"PBKDF2 with SHA-2, producing an AES-KW key that wraps the CEK. Three variants pair the hash strength with the AES-KW size:",[187,919,920,925,930],{},[190,921,922,924],{},[195,923,349],{}," → PBKDF2-HMAC-SHA256 + AES-128 wrap.",[190,926,927,929],{},[195,928,352],{}," → PBKDF2-HMAC-SHA384 + AES-192 wrap.",[190,931,932,934],{},[195,933,355],{}," → PBKDF2-HMAC-SHA512 + AES-256 wrap.",[178,936,937,938,941,942,945,946,949,950,955,956,959,960,963],{},"The token header carries the salt (",[195,939,940],{},"p2s",") and iteration count (",[195,943,944],{},"p2c",") the decryptor needs. unjwt defaults to ",[195,947,948],{},"p2c: 600_000"," per ",[211,951,954],{"href":952,"rel":953},"https:\u002F\u002Fcheatsheetseries.owasp.org\u002Fcheatsheets\u002FPassword_Storage_Cheat_Sheet.html#pbkdf2",[215],"OWASP","; on decrypt, it also enforces a floor (",[195,957,958],{},"1000",") and ceiling (",[195,961,962],{},"1_000_000",") to limit attacker-controlled CPU burn.",[965,966,967],"note",{},[178,968,969],{},"PBES2 is intentionally slow. A single password-based encryption takes ~tens of milliseconds on a modern laptop. That's a feature, not a bug — it makes offline password cracking expensive.",[219,971,973],{"id":972},"full-combination-rules","Full combination rules",[178,975,976,977,979,980,982],{},"Not every ",[195,978,197],{},"\u002F",[195,981,205],{}," pair is valid. The constraints unjwt enforces:",[187,984,985,994,1003,1012],{},[190,986,987,990,991,993],{},[195,988,989],{},"alg: \"dir\""," requires ",[195,992,205],{}," to be set and both parties to hold the matching key.",[190,995,996,999,1000,1002],{},[195,997,998],{},"alg: \"ECDH-ES\""," (no key wrap) requires ",[195,1001,205],{}," to be set and is single-recipient only.",[190,1004,1005,1008,1009,1011],{},[195,1006,1007],{},"alg: \"ECDH-ES+A*KW\""," generates a random CEK; ",[195,1010,205],{}," can be any content-encryption alg.",[190,1013,1014,1017,1018,1021],{},[195,1015,1016],{},"alg: \"RSA-OAEP*\""," with ",[195,1019,1020],{},"enc: \"A*CBC-HS*\""," works, but prefer AES-GCM.",[178,1023,1024,1025,1027,1028,1033],{},"When in doubt, let ",[195,1026,490],{}," infer from a JWK generated by ",[211,1029,1030],{"href":115},[195,1031,1032],{},"generateJWK()"," — it picks sensible defaults.",[219,1035,1037],{"id":1036},"see-also","See also",[187,1039,1040,1046,1052,1058],{},[190,1041,1042,1045],{},[211,1043,1044],{"href":61},"Encrypting →"," — the producer side.",[190,1047,1048,1051],{},[211,1049,1050],{"href":65},"Decrypting →"," — allowlists and DoS bounds.",[190,1053,1054,1057],{},[211,1055,1056],{"href":73},"ECDH-ES →"," — the public-key workflow.",[190,1059,1060,1063],{},[211,1061,1062],{"href":115},"JWK generation →"," — per-algorithm key creation.",[1065,1066,1067],"style",{},"html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":529,"searchDepth":568,"depth":568,"links":1069},[1070,1074,1076,1078,1080,1082,1083,1084],{"id":221,"depth":568,"text":1071,"children":1072},"Key management (alg)",[1073],{"id":389,"depth":575,"text":390},{"id":421,"depth":568,"text":1075},"Content encryption (enc)",{"id":513,"depth":568,"text":1077},"Choosing alg",{"id":698,"depth":568,"text":1079},"Choosing enc",{"id":747,"depth":568,"text":1081},"Direct encryption (dir)",{"id":913,"depth":568,"text":914},{"id":972,"depth":568,"text":973},{"id":1036,"depth":568,"text":1037},"md",{},{},{"title":49,"description":529},"CZ54svFqBTNy-KXsS35yANTW6uSmR3XXAijokbjjiKs",[1091,1092],{"title":72,"path":73,"stem":74,"description":529,"children":-1},{"title":79,"path":80,"stem":81,"description":529,"icon":84,"children":-1},1776888559112]