[{"data":1,"prerenderedAt":726},["ShallowReactive",2],{"navigation_docs":3,"-math-brainpoolp512r1":80,"-math-brainpoolp512r1-surround":721},[4,24],{"title":5,"path":6,"stem":7,"children":8,"icon":23},"Guide","\u002Fguide","1.guide\u002F01.index",[9,11,15,19],{"title":10,"path":6,"stem":7},"Getting started",{"title":12,"path":13,"stem":14},"CLI","\u002Fguide\u002Fcli","1.guide\u002F02.cli",{"title":16,"path":17,"stem":18},"Agents","\u002Fguide\u002Fagents","1.guide\u002F03.agents",{"title":20,"path":21,"stem":22},"Playground","\u002Fguide\u002Fplayground","1.guide\u002F04.playground","i-lucide-book-open",{"title":25,"path":26,"stem":27,"children":28,"icon":79},"Math","\u002Fmath","2.math\u002F00.index",[29,31,35,39,43,47,51,55,59,63,67,71,75],{"title":30,"path":26,"stem":27},"Overview",{"title":32,"path":33,"stem":34},"Curves and points","\u002Fmath\u002Fcurves","2.math\u002F01.curves",{"title":36,"path":37,"stem":38},"Orders and logs","\u002Fmath\u002Fgroups","2.math\u002F02.groups",{"title":40,"path":41,"stem":42},"secp256k1","\u002Fmath\u002Fsecp256k1","2.math\u002F03.secp256k1",{"title":44,"path":45,"stem":46},"sr25519","\u002Fmath\u002Fsr25519","2.math\u002F04.sr25519",{"title":48,"path":49,"stem":50},"ed25519","\u002Fmath\u002Fed25519","2.math\u002F05.ed25519",{"title":52,"path":53,"stem":54},"P-256","\u002Fmath\u002Fp256","2.math\u002F06.p256",{"title":56,"path":57,"stem":58},"P-384","\u002Fmath\u002Fp384","2.math\u002F07.p384",{"title":60,"path":61,"stem":62},"P-521","\u002Fmath\u002Fp521","2.math\u002F08.p521",{"title":64,"path":65,"stem":66},"brainpoolP256r1","\u002Fmath\u002Fbrainpoolp256r1","2.math\u002F09.brainpoolp256r1",{"title":68,"path":69,"stem":70},"brainpoolP384r1","\u002Fmath\u002Fbrainpoolp384r1","2.math\u002F10.brainpoolp384r1",{"title":72,"path":73,"stem":74},"brainpoolP512r1","\u002Fmath\u002Fbrainpoolp512r1","2.math\u002F11.brainpoolp512r1",{"title":76,"path":77,"stem":78},"Ed448","\u002Fmath\u002Fed448","2.math\u002F12.ed448","i-lucide-sigma",{"id":81,"title":72,"body":82,"description":713,"extension":714,"links":715,"meta":716,"navigation":146,"path":73,"seo":718,"stem":74,"__hash__":720},"docs\u002F2.math\u002F11.brainpoolp512r1.md",{"type":83,"value":84,"toc":703},"minimark",[85,90,94,97,108,111,221,228,231,235,242,382,393,396,401,407,413,416,420,426,433,451,455,462,498,501,507,560,564,571,612,624,627,640,646,650,653,663,670,673,676,683,686,689,699],[86,87,89],"h2",{"id":88},"brainpoolp512r1-from-rfc-5639","brainpoolP512r1, from RFC 5639",[91,92,93],"p",{},"This entry handles SEC1 point math and ECDSA verification. It verifies OpenPGP and TLS Brainpool signatures. RFC 9580 lists the curve for ECDSA and ECDH. RFC 7027 specifies Brainpool curves for TLS. The package doesn't include twisted brainpoolP512t1. This entry doesn't sign, recover keys or provide scalar math.",[91,95,96],{},"RFC 5639 section 3.7 defines brainpoolP512r1. The equation is y² = x³ + ax + b. It uses a 512-bit prime field and cofactor 1. The coefficient a is neither 0 nor -3:",[98,99,105],"pre",{"className":100,"code":102,"language":103,"meta":104},[101],"language-text","7830a3318b603b89e2327145ac234cc594cbdd8d3df91610a83441caea9863bc2ded5d5aa8253aa10a2ef1c98b9ac8b57f1117a72bf2c7b9e7c1ac4d77fc94ca\n","text","",[106,107,102],"code",{"__ignoreMap":104},[91,109,110],{},"What does a point look like here? Try the generator and two x values:",[98,112,116],{"className":113,"code":114,"language":115,"meta":104,"style":104},"language-ts shiki shiki-themes compressions compressions compressions","import { isOnCurve, multiplyGenerator } from \"@agntn\u002Fcurves\u002Fbrainpoolp512r1\";\n\nmultiplyGenerator(1n); \u002F\u002F \"0281aee4bdd82ed9…bcb9f822\"\nisOnCurve(`02${\"0\".repeat(128)}`); \u002F\u002F false, x = 0\nisOnCurve(`02${\"0\".repeat(127)}3`); \u002F\u002F true, x = 3\n","ts",[106,117,118,141,148,168,197],{"__ignoreMap":104},[119,120,123,127,131,134,138],"span",{"class":121,"line":122},"line",1,[119,124,126],{"class":125},"skH_V","import",[119,128,130],{"class":129},"s38Sx"," { isOnCurve, multiplyGenerator } ",[119,132,133],{"class":125},"from",[119,135,137],{"class":136},"shU9J"," \"@agntn\u002Fcurves\u002Fbrainpoolp512r1\"",[119,139,140],{"class":129},";\n",[119,142,144],{"class":121,"line":143},2,[119,145,147],{"emptyLinePlaceholder":146},true,"\n",[119,149,151,155,158,161,164],{"class":121,"line":150},3,[119,152,154],{"class":153},"sK71F","multiplyGenerator",[119,156,157],{"class":129},"(1",[119,159,160],{"class":125},"n",[119,162,163],{"class":129},"); ",[119,165,167],{"class":166},"scIB-","\u002F\u002F \"0281aee4bdd82ed9…bcb9f822\"\n",[119,169,171,174,177,180,183,186,189,192,194],{"class":121,"line":170},4,[119,172,173],{"class":153},"isOnCurve",[119,175,176],{"class":129},"(",[119,178,179],{"class":136},"`02${\"0\"",[119,181,182],{"class":136},".",[119,184,185],{"class":153},"repeat",[119,187,188],{"class":136},"(128)",[119,190,191],{"class":136},"}`",[119,193,163],{"class":129},[119,195,196],{"class":166},"\u002F\u002F false, x = 0\n",[119,198,200,202,204,206,208,210,213,216,218],{"class":121,"line":199},5,[119,201,173],{"class":153},[119,203,176],{"class":129},[119,205,179],{"class":136},[119,207,182],{"class":136},[119,209,185],{"class":153},[119,211,212],{"class":136},"(127)",[119,214,215],{"class":136},"}3`",[119,217,163],{"class":129},[119,219,220],{"class":166},"\u002F\u002F true, x = 3\n",[91,222,223,224,227],{},"The generator's y is even, so its compressed form starts with ",[106,225,226],{},"02",". Coordinates and scalars take 64 bytes, or 128 hex digits. Compressed points take 65 bytes. Uncompressed points take 129.",[91,229,230],{},"No other curve in this package shares that width. That's a welcome clue when checking a key.",[86,232,234],{"id":233},"verify-a-brainpoolp512r1-ecdsa-signature","Verify a brainpoolP512r1 ECDSA signature",[91,236,237,238,241],{},"Have a digest and a SEC1 public key? Give both to ",[106,239,240],{},"verify"," with the signature:",[98,243,245],{"className":113,"code":244,"language":115,"meta":104,"style":104},"import { verify } from \"@agntn\u002Fcurves\u002Fbrainpoolp512r1\";\n\nconst publicKey =\n  \"0467cea1bedf84cbdcba69a05bb2ce3a2d1c9d911d236c480929a16ad697b45a6ca127079fe8d7868671e28ef33bdf9319e2e51c84b190ac5c91b51baf0a980ba5\" +\n  \"00a7e79006194b5378f65cbe625ef2c47c64e56040d873b995b5b1ebaa4a6ce971da164391ff619af3bcfc71c5e1ad27ee0e859c2943e2de8ef7c43d3c976e9b\";\nconst digest =\n  \"43f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b023210281757b30e19218a37cbd612086fbc158caa8b4e1acb2ec00837e5d941f342fb3cc\"; \u002F\u002F SHA-512 of 313233343030\nconst signature =\n  \"0bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7\" +\n  \"44b42304e693796618d090dbcb2a2551c3cb78534611e61fd9d1a5c0938b5b8ec6ed53d2d28999eabbd8e7792d167fcf582492403a6a0f7cc94c73a28fb76b71\";\n\nverify(signature, { digest, publicKey }); \u002F\u002F true\nverify(signature, { digest: `00${digest.slice(2)}`, publicKey }); \u002F\u002F false\n",[106,246,247,260,264,275,283,290,300,312,322,330,338,343,354],{"__ignoreMap":104},[119,248,249,251,254,256,258],{"class":121,"line":122},[119,250,126],{"class":125},[119,252,253],{"class":129}," { verify } ",[119,255,133],{"class":125},[119,257,137],{"class":136},[119,259,140],{"class":129},[119,261,262],{"class":121,"line":143},[119,263,147],{"emptyLinePlaceholder":146},[119,265,266,269,272],{"class":121,"line":150},[119,267,268],{"class":125},"const",[119,270,271],{"class":129}," publicKey ",[119,273,274],{"class":125},"=\n",[119,276,277,280],{"class":121,"line":170},[119,278,279],{"class":136},"  \"0467cea1bedf84cbdcba69a05bb2ce3a2d1c9d911d236c480929a16ad697b45a6ca127079fe8d7868671e28ef33bdf9319e2e51c84b190ac5c91b51baf0a980ba5\"",[119,281,282],{"class":125}," +\n",[119,284,285,288],{"class":121,"line":199},[119,286,287],{"class":136},"  \"00a7e79006194b5378f65cbe625ef2c47c64e56040d873b995b5b1ebaa4a6ce971da164391ff619af3bcfc71c5e1ad27ee0e859c2943e2de8ef7c43d3c976e9b\"",[119,289,140],{"class":129},[119,291,293,295,298],{"class":121,"line":292},6,[119,294,268],{"class":125},[119,296,297],{"class":129}," digest ",[119,299,274],{"class":125},[119,301,303,306,309],{"class":121,"line":302},7,[119,304,305],{"class":136},"  \"43f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b023210281757b30e19218a37cbd612086fbc158caa8b4e1acb2ec00837e5d941f342fb3cc\"",[119,307,308],{"class":129},"; ",[119,310,311],{"class":166},"\u002F\u002F SHA-512 of 313233343030\n",[119,313,315,317,320],{"class":121,"line":314},8,[119,316,268],{"class":125},[119,318,319],{"class":129}," signature ",[119,321,274],{"class":125},[119,323,325,328],{"class":121,"line":324},9,[119,326,327],{"class":136},"  \"0bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c7\"",[119,329,282],{"class":125},[119,331,333,336],{"class":121,"line":332},10,[119,334,335],{"class":136},"  \"44b42304e693796618d090dbcb2a2551c3cb78534611e61fd9d1a5c0938b5b8ec6ed53d2d28999eabbd8e7792d167fcf582492403a6a0f7cc94c73a28fb76b71\"",[119,337,140],{"class":129},[119,339,341],{"class":121,"line":340},11,[119,342,147],{"emptyLinePlaceholder":146},[119,344,346,348,351],{"class":121,"line":345},12,[119,347,240],{"class":153},[119,349,350],{"class":129},"(signature, { digest, publicKey }); ",[119,352,353],{"class":166},"\u002F\u002F true\n",[119,355,357,359,362,365,368,371,374,376,379],{"class":121,"line":356},13,[119,358,240],{"class":153},[119,360,361],{"class":129},"(signature, { digest: ",[119,363,364],{"class":136},"`00${",[119,366,367],{"class":136},"digest.",[119,369,370],{"class":153},"slice",[119,372,373],{"class":136},"(2)",[119,375,191],{"class":136},[119,377,378],{"class":129},", publicKey }); ",[119,380,381],{"class":166},"\u002F\u002F false\n",[91,383,384,385,388,389,392],{},"This is Wycheproof's SHA-512 vector tcId 1. The six-byte message is ",[106,386,387],{},"313233343030"," in hex. In ASCII, that's ",[106,390,391],{},"123400",". The second call replaces the digest's first byte. It doesn't add a byte.",[91,394,395],{},"The signature is r followed by s. That's 128 bytes, or 256 hex digits. The public key can be compressed or uncompressed SEC1 hex.",[397,398,400],"h3",{"id":399},"what-about-der-and-the-digest","What about DER and the digest?",[91,402,403,404,182],{},"X.509 DER and OpenPGP MPIs need conversion first. Extract r and s. Pad each to 128 hex digits. Join them without ",[106,405,406],{},"0x",[91,408,409,410,412],{},"The digest must be hex without ",[106,411,406],{},". It can be 1 to 64 bytes. The library doesn't hash the message.",[91,414,415],{},"OpenPGP requires a digest at least as large as the curve's 64-byte field size. SHA-512 meets that requirement. Its 512 bits fit the 512-bit order exactly. Every bit gets a seat.",[397,417,419],{"id":418},"what-does-it-refuse","What does it refuse?",[98,421,424],{"className":422,"code":423,"language":103,"meta":104},[101],"verify(\"00\", { digest, publicKey })                 \u002F\u002F Signature must be 256 hex digits without 0x, r then s\nverify(signature, { digest: \"0x00\", publicKey })    \u002F\u002F Digest must be hex without 0x, 1 to 64 bytes\nverify(signature, { digest: digest + \"00\", publicKey }) \u002F\u002F Digest must be hex without 0x, 1 to 64 bytes\nverify(signature, { digest, publicKey: p521G })     \u002F\u002F Invalid SEC1 brainpoolP512r1 public key\nliftX(\"0\".repeat(128))                              \u002F\u002F No point of brainpoolP512r1 has this x\n",[106,425,423],{"__ignoreMap":104},[91,427,428,429,432],{},"The third call supplies a 65-byte digest. It's refused, not truncated. Here ",[106,430,431],{},"p521G"," is P-521's uncompressed generator, at 133 bytes. Its length alone rules it out. Malformed inputs and points off this curve throw.",[91,434,435,436,439,440,443,444,446,447,450],{},"An r or s outside 1 to n - 1 returns ",[106,437,438],{},"false",". The optional ",[106,441,442],{},"lowS"," defaults to ",[106,445,438],{},". Set it to ",[106,448,449],{},"true"," to reject s above n \u002F 2.",[397,452,454],{"id":453},"cli-and-agent-tool","CLI and agent tool",[91,456,457,458,461],{},"Prefer a terminal? The CLI uses ",[106,459,460],{},"curves brainpoolp512r1 \u003Coperation>",":",[98,463,467],{"className":464,"code":465,"language":466,"meta":104,"style":104},"language-bash shiki shiki-themes compressions compressions compressions","curves brainpoolp512r1 verify --point 0467cea1bedf84cbdcba69a05bb2ce3a2d1c9d911d236c480929a16ad697b45a6ca127079fe8d7868671e28ef33bdf9319e2e51c84b190ac5c91b51baf0a980ba500a7e79006194b5378f65cbe625ef2c47c64e56040d873b995b5b1ebaa4a6ce971da164391ff619af3bcfc71c5e1ad27ee0e859c2943e2de8ef7c43d3c976e9b --digest 43f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b023210281757b30e19218a37cbd612086fbc158caa8b4e1acb2ec00837e5d941f342fb3cc --signature 0bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c744b42304e693796618d090dbcb2a2551c3cb78534611e61fd9d1a5c0938b5b8ec6ed53d2d28999eabbd8e7792d167fcf582492403a6a0f7cc94c73a28fb76b71\n","bash",[106,468,469],{"__ignoreMap":104},[119,470,471,474,477,480,483,486,489,492,495],{"class":121,"line":122},[119,472,473],{"class":153},"curves",[119,475,476],{"class":136}," brainpoolp512r1",[119,478,479],{"class":136}," verify",[119,481,482],{"class":136}," --point",[119,484,485],{"class":136}," 0467cea1bedf84cbdcba69a05bb2ce3a2d1c9d911d236c480929a16ad697b45a6ca127079fe8d7868671e28ef33bdf9319e2e51c84b190ac5c91b51baf0a980ba500a7e79006194b5378f65cbe625ef2c47c64e56040d873b995b5b1ebaa4a6ce971da164391ff619af3bcfc71c5e1ad27ee0e859c2943e2de8ef7c43d3c976e9b",[119,487,488],{"class":136}," --digest",[119,490,491],{"class":136}," 43f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b023210281757b30e19218a37cbd612086fbc158caa8b4e1acb2ec00837e5d941f342fb3cc",[119,493,494],{"class":136}," --signature",[119,496,497],{"class":136}," 0bd2593447cc6c02caf99d60418dd42e9a194c910e6755ed0c7059acac656b04ccfe1e8348462ee43066823aee2fed7ca012e9890dfb69866d7ae88b6506f9c744b42304e693796618d090dbcb2a2551c3cb78534611e61fd9d1a5c0938b5b8ec6ed53d2d28999eabbd8e7792d167fcf582492403a6a0f7cc94c73a28fb76b71\n",[91,499,500],{},"It returns:",[98,502,505],{"className":503,"code":504,"language":103,"meta":104},[101],"{\"operation\":\"verify\",\"valid\":true}\n",[106,506,504],{"__ignoreMap":104},[91,508,509,510,513,514,513,517,513,520,513,523,513,526,529,530,532,533,536,537,513,540,513,543,513,546,513,549,513,552,513,555,529,557,182],{},"The operations are ",[106,511,512],{},"add",", ",[106,515,516],{},"subtract",[106,518,519],{},"negate",[106,521,522],{},"multiply",[106,524,525],{},"lift",[106,527,528],{},"check"," and ",[106,531,240],{},". The agent tool ",[106,534,535],{},"curves_brainpoolp512r1_compute"," offers the same operations. Its arguments are ",[106,538,539],{},"point",[106,541,542],{},"other",[106,544,545],{},"scalar",[106,547,548],{},"x",[106,550,551],{},"digest",[106,553,554],{},"signature",[106,556,442],{},[106,558,559],{},"compressed",[86,561,563],{"id":562},"brainpoolp512r1-point-math","brainpoolP512r1 point math",[91,565,566,567,570],{},"The ",[106,568,569],{},"@agntn\u002Fcurves\u002Fbrainpoolp512r1"," entry exports:",[572,573,574,586,593,603],"ul",{},[575,576,577,513,580,529,583],"li",{},[106,578,579],{},"addPoints",[106,581,582],{},"subtractPoints",[106,584,585],{},"negatePoint",[575,587,588,529,591],{},[106,589,590],{},"multiplyPoint",[106,592,154],{},[575,594,595,513,598,529,600],{},[106,596,597],{},"liftX",[106,599,173],{},[106,601,602],{},"convertPoint",[575,604,605,513,607,529,609],{},[106,606,240],{},[106,608,72],{},[106,610,611],{},"INVALID_POINT",[91,613,614,616,617,620,621,623],{},[106,615,72],{}," holds the domain parameters. The other export names match the ",[618,619,60],"a",{"href":61}," entry. Pass ",[106,622,597],{}," exactly 128 hex digits for x. Scalars run from 1 to n - 1. Use a bigint or hex with at most 128 digits.",[91,625,626],{},"Why do those small x values matter? At x = 0, b isn't a square modulo p. So there's no point. Neither x = 1 nor x = 2 has one. Three misses, then x = 3 hits.",[91,628,629,630,529,632,634,635,529,637,639],{},"Length is a useful clue here, unlike the other Brainpool curves. ",[618,631,52],{"href":53},[618,633,64],{"href":65}," both use 32-byte coordinates. ",[618,636,56],{"href":57},[618,638,68],{"href":69}," both use 48. P-521 uses 66, with 67-byte compressed or 133-byte uncompressed points.",[91,641,642,643,645],{},"A P-384 or P-521 key fails on length alone. But the right length doesn't prove a point is valid. Use ",[106,644,173],{}," to check the point itself.",[86,647,649],{"id":648},"written-from-the-specs","Written from the specs",[91,651,652],{},"Brainpool's parameters are pseudo-random and reproducible. They're verifiable rather than chosen as special primes for speed. Neither the prime nor a has a shortcut form.",[91,654,655,656,659,660,662],{},"This curve shares ",[106,657,658],{},"src\u002Fcore\u002Fsec1.ts"," with six others. They are ",[618,661,40],{"href":41},", P-256, P-384, P-521, brainpoolP256r1 and brainpoolP384r1. Seven curves share one implementation.",[91,664,665,666,669],{},"The a = 0 and a = -3 formulas refuse this curve. They report ",[106,667,668],{},"These formulas are for another a",". Addition and doubling instead use algorithms 1 and 3 from Renes, Costello and Batina (2016). These complete formulas work for any a. They cost a few more multiplications. That's a real price for generality.",[91,671,672],{},"The other two Brainpool curves use those formulas too. This curve changes the widths. Both n and p have 512 bits. Since p is 3 mod 4, a square root takes one power.",[91,674,675],{},"Multiplication walks 128 hex digits. The secret comb has four rows, 32 steps apart. The verification table has 128 rows of 15 points. Verification reads G from that faster table. Its scalars are public.",[91,677,678,679,682],{},"A secret multiply takes the same steps for every scalar. ",[106,680,681],{},"test\u002Fbrainpoolp512r1.test.ts"," times 1 against n - 1. JavaScript bigints don't promise constant time. The library isn't audited. Keep real money away.",[91,684,685],{},"In a local run, G multiplication took about 2.1 ms. Another point took about 5.7 ms. Verification took about 6.3 ms. Generic code for curves you define took about 41 ms per multiplication. These timings aren't test assertions.",[91,687,688],{},"All 337 Wycheproof SHA-512 P1363 vectors pass. That's 251 valid and 86 invalid signatures. RFC 7027 appendix A.3 gives two key pairs and their shared secret. Both match.",[91,690,691,694,695,698],{},[106,692,693],{},"@noble\u002Fcurves"," has no Brainpool. Multiples of G are frozen from OpenSSL 3.6.5 through ",[106,696,697],{},"node:crypto",". In a local run, OpenSSL agreed on 200 random keys. The library also verified 20 signatures made by OpenSSL.",[700,701,702],"style",{},"html pre.shiki code .skH_V, html code.shiki .skH_V{--shiki-light:var(--shiki-token-keyword);--shiki-default:var(--shiki-token-keyword);--shiki-dark:var(--shiki-token-keyword)}html pre.shiki code .s38Sx, html code.shiki .s38Sx{--shiki-light:var(--ui-text-highlighted);--shiki-default:var(--ui-text-highlighted);--shiki-dark:var(--ui-text-highlighted)}html pre.shiki code .shU9J, html code.shiki .shU9J{--shiki-light:var(--shiki-token-string);--shiki-default:var(--shiki-token-string);--shiki-dark:var(--shiki-token-string)}html pre.shiki code .sK71F, html code.shiki .sK71F{--shiki-light:var(--shiki-token-function);--shiki-default:var(--shiki-token-function);--shiki-dark:var(--shiki-token-function)}html pre.shiki code .scIB-, html code.shiki .scIB-{--shiki-light:var(--shiki-token-comment);--shiki-default:var(--shiki-token-comment);--shiki-dark:var(--shiki-token-comment)}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":104,"searchDepth":143,"depth":143,"links":704},[705,706,711,712],{"id":88,"depth":143,"text":89},{"id":233,"depth":143,"text":234,"children":707},[708,709,710],{"id":399,"depth":150,"text":400},{"id":418,"depth":150,"text":419},{"id":453,"depth":150,"text":454},{"id":562,"depth":143,"text":563},{"id":648,"depth":143,"text":649},"brainpoolP512r1 point math and ECDSA verification for OpenPGP keys and Brainpool certificates","md",null,{"icon":717},"i-lucide-tree-deciduous",{"title":719,"description":713},"brainpoolP512r1 ECDSA verification and SEC1 points in TypeScript","a4frZkLBLPbCgbLBjU8bD-5OJV2fSsZZNGeWFhStq1w",[722,724],{"title":68,"path":69,"stem":70,"description":723,"children":-1},"brainpoolP384r1 point math and ECDSA verification for OpenPGP keys and Brainpool certificates",{"title":76,"path":77,"stem":78,"description":725,"children":-1},"Verify RFC 8032 Ed448 signatures with context and OpenPGP support",1793795813911]