(* Content-type: application/vnd.wolfram.mathematica *)

(*** Wolfram Notebook File ***)
(* http://www.wolfram.com/nb *)

(* CreatedBy='Wolfram 15.0' *)

(*CacheID: 234*)
(* Internal cache information:
NotebookFileLineBreakTest
NotebookFileLineBreakTest
NotebookDataPosition[       154,          7]
NotebookDataLength[     50034,       1264]
NotebookOptionsPosition[     41645,       1108]
NotebookOutlinePosition[     43980,       1161]
CellTagsIndexPosition[     43902,       1156]
WindowTitle->Secp256k1PublicKeyList
WindowFrame->Normal*)

(* Beginning of Notebook Content *)
Notebook[{
Cell[BoxData[GridBox[{
   {GridBox[{
      {
       ItemBox[Cell[BoxData[
         RowBox[{
          TemplateBox[{12},
           "Spacer1"], Cell[
          "WOLFRAM INSTITUTE/ PUZZLES SYMBOL", "PacletNameCell",
           TextAlignment->Center,ExpressionUUID->
           "525a3587-73c7-4e08-8c00-e3133dbaa514"], 
          TemplateBox[{8},
           "Spacer1"]}]],
         TextAlignment->Center,ExpressionUUID->
         "81245c68-194c-4ec1-ba89-1328c693380d"],
        Background->LightDarkSwitched[
          RGBColor[0.490196, 0.576471, 0.690196]],
        ItemSize->Full], ""}
     },
     GridBoxAlignment->{"Rows" -> {{Center}}},
     GridBoxItemSize->{"Columns" -> {Full, 
         Scaled[0.02]}, "Rows" -> {{2.5}}}], Cell[TextData[{
     Cell[BoxData[
      TagBox[
       ActionMenuBox[
        FrameBox[Cell[TextData[{
          "See Also",
          " ",
          Cell[BoxData[
           GraphicsBox[
            {GrayLevel[0.66667], Thickness[0.13], 
             LineBox[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]},
            AspectRatio->1,
            ImageSize->20,
            PlotRange->{{-3, 4}, {-1, 1}}]],ExpressionUUID->
           "7d4ed14f-79c0-4667-8cba-f94e44cecb13"]
         }],ExpressionUUID->"960329fb-dc00-400e-870f-e04813f9fc34"],
         StripOnInput->False],{
        StyleBox[
          "\"Secp256k1PublicKey\"", "SeeAlsoRelated", StripOnInput -> False] :> 
         Documentation`HelpLookup[
          "paclet:WolframInstitute/Puzzles/ref/Secp256k1PublicKey"], 
         StyleBox[
          "\"Secp256k1Point\"", "SeeAlsoRelated", StripOnInput -> False] :> 
         Documentation`HelpLookup[
          "paclet:WolframInstitute/Puzzles/ref/Secp256k1Point"], 
         StyleBox[
          "\"Secp256k1PointQ\"", "SeeAlsoRelated", StripOnInput -> False] :> 
         Documentation`HelpLookup[
          "paclet:WolframInstitute/Puzzles/ref/Secp256k1PointQ"], 
         StyleBox[
          "\"BitcoinAddress\"", "SeeAlsoRelated", StripOnInput -> False] :> 
         Documentation`HelpLookup[
          "paclet:WolframInstitute/Puzzles/ref/BitcoinAddress"]},
        Appearance->None,
        MenuAppearance->Automatic,
        MenuStyle->"SeeAlso"],
       MouseAppearanceTag["LinkHand"]]],
      LineSpacing->{1.4, 0},ExpressionUUID->
      "e6712021-7895-46ed-99ac-f82e40d692b0"],
     "\[ThickSpace]\[ThickSpace]\[ThickSpace]\[ThickSpace]\[ThickSpace]\
\[ThickSpace]",
     Cell[BoxData[
      TagBox[
       ActionMenuBox[
        FrameBox[Cell[TextData[{
          "Related Guides",
          " ",
          Cell[BoxData[
           GraphicsBox[
            {GrayLevel[0.66667], Thickness[0.13], 
             LineBox[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]},
            AspectRatio->1,
            ImageSize->20,
            PlotRange->{{-3, 4}, {-1, 1}}]],ExpressionUUID->
           "e0fff8e8-207e-4d26-8059-1cd20f8978b7"]
         }],ExpressionUUID->"03c9b0f7-f3a9-439a-a38b-48641def6f0b"],
         StripOnInput->False],{
        "\"Derivation\"" :> 
         Documentation`HelpLookup[
          "paclet:WolframInstitute/Puzzles/guide/Derivation"]},
        Appearance->None,
        MenuAppearance->Automatic,
        MenuStyle->"MoreAbout"],
       MouseAppearanceTag["LinkHand"]]],
      LineSpacing->{1.4, 0},ExpressionUUID->
      "45f3a476-b884-4fbc-b3b7-714d6020bab5"],
     "\[ThickSpace]\[ThickSpace]\[ThickSpace]\[ThickSpace]\[ThickSpace]\
\[ThickSpace]",
     Cell[BoxData[
      TagBox[
       ActionMenuBox[
        FrameBox[Cell[TextData[{
          "URL",
          " ",
          Cell[BoxData[
           GraphicsBox[
            {GrayLevel[0.66667], Thickness[0.13], 
             LineBox[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]},
            AspectRatio->1,
            ImageSize->20,
            PlotRange->{{-3, 4}, {-1, 1}}]],ExpressionUUID->
           "12ae85a1-ac7e-4861-a122-1125e3835337"]
         }],ExpressionUUID->"498d783b-a47c-4274-8201-1f05a1c241a3"],
         StripOnInput->False],{
        "\"WolframInstitute/Puzzles/ref/Secp256k1PublicKeyList\"" :> None, 
         "\"Copy Wolfram Documentation Center URL\"" :> 
         CopyToClipboard[
          "WolframInstitute/Puzzles/ref/Secp256k1PublicKeyList"], Delimiter, 
         "\"Copy web URL\"" :> 
         Module[{DocumentationSearch`Private`nb$}, 
           DocumentationSearch`Private`nb$ = 
            NotebookPut[
             Notebook[{
               Cell[BoxData[
                 MakeBoxes[
                  Hyperlink[
                   "http://reference.wolfram.com/language/WolframInstitute/\
Puzzles/ref/Secp256k1PublicKeyList.html"], StandardForm]], "Input", 
                 TextClipboardType -> "PlainText"]}, Visible -> False]]; 
           SelectionMove[DocumentationSearch`Private`nb$, All, Notebook]; 
           FrontEndTokenExecute[DocumentationSearch`Private`nb$, "Copy"]; 
           NotebookClose[DocumentationSearch`Private`nb$]; Null], 
         "\"Go to web URL\"" :> 
         FrontEndExecute[{
           NotebookLocate[{
             URL[If[TrueQ[False], 
                 "http://reference.wolfram.com/system-modeler/", 
                 "http://reference.wolfram.com/language/"] <> 
               "WolframInstitute/Puzzles/ref/Secp256k1PublicKeyList" <> 
               ".html"], None}]}]},
        Appearance->None,
        MenuAppearance->Automatic,
        MenuStyle->"URLMenu"],
       MouseAppearanceTag["LinkHand"]]],
      LineSpacing->{1.4, 0},ExpressionUUID->
      "b724f470-0687-41a3-ae9b-4bc1119eab8a"]
    }], "AnchorBar",
     CacheGraphics->False,ExpressionUUID->
     "300db0b4-3774-44cb-bd82-d2b5204109b6"]}
  }]], "AnchorBarGrid",
 CellID->1,ExpressionUUID->"bb6274c0-5672-4452-8da0-f35a16d278f6"],

Cell["WolframInstitute`Puzzles`", "ContextNameCell",ExpressionUUID->"9ede5365-1805-45ba-a759-5e5ccd3cb96f"],

Cell[CellGroupData[{

Cell[BoxData[GridBox[{
   {Cell[TextData[{
     Cell[
     "Secp256k1PublicKeyList", "ObjectName",ExpressionUUID->
      "7b12cdf5-9291-4c6e-ae97-e7976dfdb4f3"],
     Cell[BoxData[
      TemplateBox[{8},
       "Spacer1"]],ExpressionUUID->"397669f1-511e-4e95-8a3f-471004d2bac0"],
     Cell[BoxData[
     ""], "ObjectNameTranslation",ExpressionUUID->
      "9fae12a6-4711-40b6-a507-18ed9c43636d"]
    }],ExpressionUUID->"a69fd900-cd8b-4c10-ad87-1ea1dc66d914"], 
    "\[SpanFromLeft]"}
  }]], "ObjectNameGrid",ExpressionUUID->"48ac0785-851a-40d1-9387-\
38938137aede"],

Cell[BoxData[GridBox[{
   {"", Cell[TextData[{
     Cell[BoxData[
      RowBox[{
       TemplateBox[{
         Cell[
          TextData["Secp256k1PublicKeyList"]], 
         "paclet:WolframInstitute/Puzzles/ref/Secp256k1PublicKeyList", 
         "WolframInstitute/Puzzles Package Symbol"},
        "PackageLink",
        BaseStyle->"InlineFormula"], "[", 
       RowBox[{"{", 
        RowBox[{
         SubscriptBox[
          StyleBox["key", "TI"], 
          StyleBox["1", "TR"]], ",", " ", 
         SubscriptBox[
          StyleBox["key", "TI"], 
          StyleBox["2", "TR"]], ",", " ", "\[Ellipsis]"}], "}"}], "]"}]], 
      "InlineFormula",
      FontFamily->"Source Sans Pro",
      FontSize->0.9 Inherited,ExpressionUUID->
      "28cbe85f-3f8b-4741-ad61-229a308ad8b3"],
     "\[LineSeparator]",
     "gives the list of compressed public keys of a list of secp256k1 private \
keys."
    }],ExpressionUUID->"3358dda7-9166-4657-8048-28b0e9fea6a2"]},
   {"", Cell[TextData[{
     Cell[BoxData[
      RowBox[{
       TemplateBox[{
         Cell[
          TextData["Secp256k1PublicKeyList"]], 
         "paclet:WolframInstitute/Puzzles/ref/Secp256k1PublicKeyList", 
         "WolframInstitute/Puzzles Package Symbol"},
        "PackageLink",
        BaseStyle->"InlineFormula"], "[", 
       RowBox[{
        RowBox[{"{", 
         RowBox[{
          SubscriptBox[
           StyleBox["key", "TI"], 
           StyleBox["1", "TR"]], ",", " ", 
          SubscriptBox[
           StyleBox["key", "TI"], 
           StyleBox["2", "TR"]], ",", " ", "\[Ellipsis]"}], "}"}], ",", " ", 
        StyleBox["form", "TI"]}], "]"}]], "InlineFormula",
      FontFamily->"Source Sans Pro",
      FontSize->0.9 Inherited,ExpressionUUID->
      "46c64131-0bd6-494e-81bc-da4aaf01ffd7"],
     "\[LineSeparator]",
     "gives them in ",
     StyleBox["form", "TI"],
     ", either ",
     Cell[BoxData["\"\<Compressed\>\""], "InlineFormula",
      FontFamily->"Source Sans Pro",
      FontSize->0.9 Inherited,ExpressionUUID->
      "de6e463b-ecc5-43ba-99eb-9d624054e145"],
     " or ",
     Cell[BoxData["\"\<Uncompressed\>\""], "InlineFormula",
      FontFamily->"Source Sans Pro",
      FontSize->0.9 Inherited,ExpressionUUID->
      "c51086ea-8b5f-464b-afce-f9db197af5c8"],
     "."
    }],ExpressionUUID->"f5147d33-049f-4680-9b3a-e14d88849a90"]}
  }]], "Usage",ExpressionUUID->"5637d2d8-a114-4fc0-b90f-578c9021520a"]
}, Open  ]],

Cell[CellGroupData[{

Cell[TextData[Cell[BoxData[Cell[TextData[{
  Cell[BoxData[
   DynamicBox[ToBoxes[
     If[CurrentValue[
        EvaluationCell[], "CellGroupOpen"] =!= Closed, 
      Style[
       Graphics[{
         Thickness[0.18], 
         RGBColor[0.8509803921568627, 0.396078431372549, 0], 
         Line[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]}, AspectRatio -> 1, 
        PlotRange -> {{-3, 4}, {-1, 1}}, ImageSize -> 20], Magnification -> 
       0.68 Inherited], 
      Rotate[
       Style[
        Graphics[{
          Thickness[0.18], 
          RGBColor[0.8509803921568627, 0.396078431372549, 0], 
          Line[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]}, AspectRatio -> 1, 
         PlotRange -> {{-3, 4}, {-1, 1}}, ImageSize -> 20], Magnification -> 
        0.68 Inherited], Rational[1, 2] Pi, {-1.65, -1}]]],
    ImageSizeCache->{
     13.600000000000001`, {-0.1685058593749993, 13.768505859375}}]],
   ExpressionUUID->"deb506e7-4833-4af4-93f5-56d29277cde5"],
  Cell[BoxData[
   TemplateBox[{1},
    "Spacer1"]],ExpressionUUID->"f2c845c3-3ba9-4c0a-8886-30f5c7e53640"],
  "Details and Options"
 }], "NotesFrameText",ExpressionUUID->
  "2cd81f9b-f17d-42bd-8049-8670e8150441"]],ExpressionUUID->"782cbca3-4bad-\
491e-891a-09ed75b071e2"]], "NotesSection",
 ShowGroupOpener->"Thumbnail",
 WholeCellGroupOpener->True,
 CellGroupingRules->{"SectionGrouping", 50},
 CacheGraphics->False,
 CellID->105215695,ExpressionUUID->"b67d4849-895b-49e9-aa8d-898f08fe19d4"],

Cell[TextData[{
 "The result is the same, key for key, as mapping ",
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData["Secp256k1PublicKey"]], 
    "paclet:WolframInstitute/Puzzles/ref/Secp256k1PublicKey", 
    "WolframInstitute/Puzzles Package Symbol"},
   "PackageLink",
   BaseStyle->"InlineFormula"]], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "bc09d018-c9ac-4365-afaa-3396f443cb4e"],
 " over the list."
}], "Notes",ExpressionUUID->"a4a4e9c5-f487-4dd6-b703-b53ddad7eaa6"],

Cell["\<\
The keys are derived by a batch comb algorithm over precomputed multiples of \
the generator, evaluated on whole lists of scalars at once, which is several \
times faster per key than deriving them one at a time.\
\>", "Notes",ExpressionUUID->"ce5b5254-896e-4734-b292-7326aafdfb9f"],

Cell["\<\
The precomputed table is built once per session, on the first call.\
\>", "Notes",ExpressionUUID->"0bb9f8d3-fcd4-46cb-b00e-565170f0960f"],

Cell["\<\
Every point the batch algorithm produces is checked against the curve \
equation, and any point that fails is recomputed with the Wolfram Language \
elliptic-curve engine.\
\>", "Notes",ExpressionUUID->"dc8b6d8b-253f-4254-a31c-c63870eaa707"],

Cell[TextData[{
 "Each private key is an integer in ",
 Cell[BoxData["1"], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "e5a069d5-964c-46a2-9f50-a96cd15fcef7"],
 " to ",
 Cell[BoxData[
  RowBox[{
   StyleBox["n", "TI"], "-", "1"}]], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "478a4ac9-cfa0-487c-af27-d31defdb1e75"],
 ", a 32-byte ByteArray, or a 64-digit hexadecimal string."
}], "Notes",ExpressionUUID->"8cbf0227-e8a6-4cec-9e53-07c566ceb5cc"],

Cell["\<\
A list containing anything that is not a private key matches no definition \
and the call is returned unevaluated.\
\>", "Notes",ExpressionUUID->"3779a142-360e-433a-9a31-c0b03ec2afbc"]
}, Closed]],

Cell["", "PageDelimiter",ExpressionUUID->"da63fbc6-bcf1-4588-9177-7d78b56fee5f"],

Cell[CellGroupData[{

Cell[TextData[{
 Cell[BoxData[
  DynamicBox[ToBoxes[
    If[
     MatchQ[
      CurrentValue[
       EvaluationNotebook[], {
       TaggingRules, "Openers", "PrimaryExamplesSection"}, Open], 
      Alternatives[True, Open]], 
     Style[
      Graphics[{
        Thickness[0.18], 
        RGBColor[0.8509803921568627, 0.396078431372549, 0], 
        Line[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]}, AspectRatio -> 1, 
       PlotRange -> {{-3, 4}, {-1, 1}}, ImageSize -> 20], Magnification -> 
      0.68 Inherited], 
     Rotate[
      Style[
       Graphics[{
         Thickness[0.18], 
         RGBColor[0.8509803921568627, 0.396078431372549, 0], 
         Line[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]}, AspectRatio -> 1, 
        PlotRange -> {{-3, 4}, {-1, 1}}, ImageSize -> 20], Magnification -> 
       0.68 Inherited], Rational[1, 2] Pi, {-1.65, -1}]]],
   ImageSizeCache->{
    13.600000000000001`, {4.251494140625001, 9.348505859375}}]],
  ExpressionUUID->"d48ec511-d46c-4b81-8eda-22ee209789ec"],
 Cell[BoxData[
  TemplateBox[{1},
   "Spacer1"]],ExpressionUUID->"6a0385b0-f382-4833-99fa-b380e6bc9a9d"],
 "Examples",
 "\[NonBreakingSpace]\[NonBreakingSpace]",
 Cell["(9)", "ExampleCount",ExpressionUUID->
  "0bd7eb66-f057-46d9-b90f-1408cbadad34"]
}], "PrimaryExamplesSection",
 WholeCellGroupOpener->True,
 CacheGraphics->False,
 CellID->981144384,ExpressionUUID->"91828c78-fd15-4122-88ea-782cc9c5eda8"],

Cell[BoxData[
 RowBox[{"Needs", "[", "\"\<WolframInstitute`Puzzles`\>\"", "]"}]], "Input", \
"ExampleInitialization",
 CellLabel->"In[1]:=",
 CellID->1969679695,ExpressionUUID->"590565d7-78a1-47aa-9ed5-b4e67a69fa9b"],

Cell[CellGroupData[{

Cell[TextData[{
 Cell[BoxData[
  DynamicBox[ToBoxes[
    If[CurrentValue[
       EvaluationCell[], "CellGroupOpen"] =!= Closed, 
     Style[
      Graphics[{
        Thickness[0.18], 
        RGBColor[0.8509803921568627, 0.396078431372549, 0], 
        Line[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]}, AspectRatio -> 1, 
       PlotRange -> {{-3, 4}, {-1, 1}}, ImageSize -> 20], Magnification -> 
      0.68 Inherited], 
     Rotate[
      Style[
       Graphics[{
         Thickness[0.18], 
         RGBColor[0.8509803921568627, 0.396078431372549, 0], 
         Line[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]}, AspectRatio -> 1, 
        PlotRange -> {{-3, 4}, {-1, 1}}, ImageSize -> 20], Magnification -> 
       0.68 Inherited], Rational[1, 2] Pi, {-1.65, -1}]]]]],ExpressionUUID->
  "d1da43d1-2cf0-45a5-badb-fa47ab9633db"],
 Cell[BoxData[
  TemplateBox[{1},
   "Spacer1"]],ExpressionUUID->"6873f065-3ef2-4d1d-81d4-3f30935669b8"],
 "Basic Examples",
 "\[NonBreakingSpace]\[NonBreakingSpace]",
 Cell["(3)", "ExampleCount",ExpressionUUID->
  "8d41652c-817c-40d6-ae99-e597fe4518ca"]
}], "ExampleSection", "ExampleSection",
 WholeCellGroupOpener->True,
 CacheGraphics->False,
 CellID->1714220222,ExpressionUUID->"3b114e8c-4602-4f97-8193-a11090e74bb3"],

Cell["The keys of the first four scalars:", "ExampleText",
 CellTags->
  "TextAnnotation",ExpressionUUID->"aea96448-7554-4e59-a7b2-05d692153dc9"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"Secp256k1PublicKeyList", "[", 
  RowBox[{"{", 
   RowBox[{"1", ",", " ", "2", ",", " ", "3", ",", " ", "4"}], "}"}], 
  "]"}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"c6be8dac-83f3-4ad7-a5d5-89ce4a202f14"],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{
   InterpretationBox[
    RowBox[{
     TagBox["ByteArray",
      "SummaryHead"], "[", 
     DynamicModuleBox[{Typeset`open$$ = False, Typeset`embedState$$ = 
      "Ready"}, 
      TemplateBox[{
        PaneSelectorBox[{False -> GridBox[{{
              GridBox[{{
                 TagBox["\"33 bytes\"", "SummaryItem"]}}, 
               GridBoxAlignment -> {
                "Columns" -> {{Left}}, "Rows" -> {{Automatic}}}, AutoDelete -> 
               False, GridBoxItemSize -> {
                "Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}, 
               GridBoxSpacings -> {
                "Columns" -> {{2}}, "Rows" -> {{Automatic}}}, 
               BaseStyle -> {
                ShowStringCharacters -> False, NumberMarks -> False, 
                 PrintPrecision -> 3, ShowSyntaxStyles -> False}]}}, 
            GridBoxAlignment -> {"Columns" -> {{Left}}, "Rows" -> {{Top}}}, 
            AutoDelete -> False, 
            GridBoxItemSize -> {
             "Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}, 
            BaselinePosition -> {1, 1}], True -> GridBox[{{
              GridBox[{{
                 TagBox["\"33 bytes\"", "SummaryItem"]}}, 
               GridBoxAlignment -> {
                "Columns" -> {{Left}}, "Rows" -> {{Automatic}}}, AutoDelete -> 
               False, GridBoxItemSize -> {
                "Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}, 
               GridBoxSpacings -> {
                "Columns" -> {{2}}, "Rows" -> {{Automatic}}}, 
               BaseStyle -> {
                ShowStringCharacters -> False, NumberMarks -> False, 
                 PrintPrecision -> 3, ShowSyntaxStyles -> False}]}}, 
            GridBoxAlignment -> {"Columns" -> {{Left}}, "Rows" -> {{Top}}}, 
            AutoDelete -> False, 
            GridBoxItemSize -> {
             "Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}, 
            BaselinePosition -> {1, 1}]}, 
         Dynamic[Typeset`open$$], ImageSize -> Automatic]},
       "SummaryPanel"],
      DynamicModuleValues:>{}], "]"}],
    ByteArray[{2, 121, 190, 102, 126, 249, 220, 187, 172, 85, 160, 98, 149, 
     206, 135, 11, 7, 2, 155, 252, 219, 45, 206, 40, 217, 89, 242, 129, 91, 
     22, 248, 23, 152}],
    Editable->False,
    SelectWithContents->True,
    Selectable->False], ",", 
   InterpretationBox[
    RowBox[{
     TagBox["ByteArray",
      "SummaryHead"], "[", 
     DynamicModuleBox[{Typeset`open$$ = False, Typeset`embedState$$ = 
      "Ready"}, 
      TemplateBox[{
        PaneSelectorBox[{False -> GridBox[{{
              GridBox[{{
                 TagBox["\"33 bytes\"", "SummaryItem"]}}, 
               GridBoxAlignment -> {
                "Columns" -> {{Left}}, "Rows" -> {{Automatic}}}, AutoDelete -> 
               False, GridBoxItemSize -> {
                "Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}, 
               GridBoxSpacings -> {
                "Columns" -> {{2}}, "Rows" -> {{Automatic}}}, 
               BaseStyle -> {
                ShowStringCharacters -> False, NumberMarks -> False, 
                 PrintPrecision -> 3, ShowSyntaxStyles -> False}]}}, 
            GridBoxAlignment -> {"Columns" -> {{Left}}, "Rows" -> {{Top}}}, 
            AutoDelete -> False, 
            GridBoxItemSize -> {
             "Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}, 
            BaselinePosition -> {1, 1}], True -> GridBox[{{
              GridBox[{{
                 TagBox["\"33 bytes\"", "SummaryItem"]}}, 
               GridBoxAlignment -> {
                "Columns" -> {{Left}}, "Rows" -> {{Automatic}}}, AutoDelete -> 
               False, GridBoxItemSize -> {
                "Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}, 
               GridBoxSpacings -> {
                "Columns" -> {{2}}, "Rows" -> {{Automatic}}}, 
               BaseStyle -> {
                ShowStringCharacters -> False, NumberMarks -> False, 
                 PrintPrecision -> 3, ShowSyntaxStyles -> False}]}}, 
            GridBoxAlignment -> {"Columns" -> {{Left}}, "Rows" -> {{Top}}}, 
            AutoDelete -> False, 
            GridBoxItemSize -> {
             "Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}, 
            BaselinePosition -> {1, 1}]}, 
         Dynamic[Typeset`open$$], ImageSize -> Automatic]},
       "SummaryPanel"],
      DynamicModuleValues:>{}], "]"}],
    ByteArray[{2, 198, 4, 127, 148, 65, 237, 125, 109, 48, 69, 64, 110, 149, 
     192, 124, 216, 92, 119, 142, 75, 140, 239, 60, 167, 171, 172, 9, 185, 92,
      112, 158, 229}],
    Editable->False,
    SelectWithContents->True,
    Selectable->False], ",", 
   InterpretationBox[
    RowBox[{
     TagBox["ByteArray",
      "SummaryHead"], "[", 
     DynamicModuleBox[{Typeset`open$$ = False, Typeset`embedState$$ = 
      "Ready"}, 
      TemplateBox[{
        PaneSelectorBox[{False -> GridBox[{{
              GridBox[{{
                 TagBox["\"33 bytes\"", "SummaryItem"]}}, 
               GridBoxAlignment -> {
                "Columns" -> {{Left}}, "Rows" -> {{Automatic}}}, AutoDelete -> 
               False, GridBoxItemSize -> {
                "Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}, 
               GridBoxSpacings -> {
                "Columns" -> {{2}}, "Rows" -> {{Automatic}}}, 
               BaseStyle -> {
                ShowStringCharacters -> False, NumberMarks -> False, 
                 PrintPrecision -> 3, ShowSyntaxStyles -> False}]}}, 
            GridBoxAlignment -> {"Columns" -> {{Left}}, "Rows" -> {{Top}}}, 
            AutoDelete -> False, 
            GridBoxItemSize -> {
             "Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}, 
            BaselinePosition -> {1, 1}], True -> GridBox[{{
              GridBox[{{
                 TagBox["\"33 bytes\"", "SummaryItem"]}}, 
               GridBoxAlignment -> {
                "Columns" -> {{Left}}, "Rows" -> {{Automatic}}}, AutoDelete -> 
               False, GridBoxItemSize -> {
                "Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}, 
               GridBoxSpacings -> {
                "Columns" -> {{2}}, "Rows" -> {{Automatic}}}, 
               BaseStyle -> {
                ShowStringCharacters -> False, NumberMarks -> False, 
                 PrintPrecision -> 3, ShowSyntaxStyles -> False}]}}, 
            GridBoxAlignment -> {"Columns" -> {{Left}}, "Rows" -> {{Top}}}, 
            AutoDelete -> False, 
            GridBoxItemSize -> {
             "Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}, 
            BaselinePosition -> {1, 1}]}, 
         Dynamic[Typeset`open$$], ImageSize -> Automatic]},
       "SummaryPanel"],
      DynamicModuleValues:>{}], "]"}],
    ByteArray[{2, 249, 48, 138, 1, 146, 88, 195, 16, 73, 52, 79, 133, 248, 
     157, 82, 41, 181, 49, 200, 69, 131, 111, 153, 176, 134, 1, 241, 19, 188, 
     224, 54, 249}],
    Editable->False,
    SelectWithContents->True,
    Selectable->False], ",", 
   InterpretationBox[
    RowBox[{
     TagBox["ByteArray",
      "SummaryHead"], "[", 
     DynamicModuleBox[{Typeset`open$$ = False, Typeset`embedState$$ = 
      "Ready"}, 
      TemplateBox[{
        PaneSelectorBox[{False -> GridBox[{{
              GridBox[{{
                 TagBox["\"33 bytes\"", "SummaryItem"]}}, 
               GridBoxAlignment -> {
                "Columns" -> {{Left}}, "Rows" -> {{Automatic}}}, AutoDelete -> 
               False, GridBoxItemSize -> {
                "Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}, 
               GridBoxSpacings -> {
                "Columns" -> {{2}}, "Rows" -> {{Automatic}}}, 
               BaseStyle -> {
                ShowStringCharacters -> False, NumberMarks -> False, 
                 PrintPrecision -> 3, ShowSyntaxStyles -> False}]}}, 
            GridBoxAlignment -> {"Columns" -> {{Left}}, "Rows" -> {{Top}}}, 
            AutoDelete -> False, 
            GridBoxItemSize -> {
             "Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}, 
            BaselinePosition -> {1, 1}], True -> GridBox[{{
              GridBox[{{
                 TagBox["\"33 bytes\"", "SummaryItem"]}}, 
               GridBoxAlignment -> {
                "Columns" -> {{Left}}, "Rows" -> {{Automatic}}}, AutoDelete -> 
               False, GridBoxItemSize -> {
                "Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}, 
               GridBoxSpacings -> {
                "Columns" -> {{2}}, "Rows" -> {{Automatic}}}, 
               BaseStyle -> {
                ShowStringCharacters -> False, NumberMarks -> False, 
                 PrintPrecision -> 3, ShowSyntaxStyles -> False}]}}, 
            GridBoxAlignment -> {"Columns" -> {{Left}}, "Rows" -> {{Top}}}, 
            AutoDelete -> False, 
            GridBoxItemSize -> {
             "Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}, 
            BaselinePosition -> {1, 1}]}, 
         Dynamic[Typeset`open$$], ImageSize -> Automatic]},
       "SummaryPanel"],
      DynamicModuleValues:>{}], "]"}],
    ByteArray[{2, 228, 147, 219, 241, 193, 13, 128, 243, 88, 30, 73, 4, 147, 
     11, 20, 4, 204, 108, 19, 144, 14, 224, 117, 132, 116, 250, 148, 171, 232,
      196, 205, 19}],
    Editable->False,
    SelectWithContents->True,
    Selectable->False]}], "}"}]], "Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"3207fd7c-9207-4bf9-bf68-3b35fbff1fd6"]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 InterpretationBox[Cell[
  "\t", "ExampleDelimiter",ExpressionUUID->
   "0d01022c-4390-435c-8c98-b8517b6982b8"],
  $Line = 0; Null]], "ExampleDelimiter",ExpressionUUID->"73ca44d8-3e63-4999-\
9f20-db398a3d5673"],

Cell["\<\
The batch result agrees with the single-key function key for key:\
\>", "ExampleText",ExpressionUUID->"c0138e32-9342-4916-b5d4-4c5977731f7b"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{
  RowBox[{"Secp256k1PublicKeyList", "[", 
   RowBox[{"Range", "[", "20", "]"}], "]"}], " ", "===", " ", 
  RowBox[{"Map", "[", 
   RowBox[{"Secp256k1PublicKey", ",", " ", 
    RowBox[{"Range", "[", "20", "]"}]}], "]"}]}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"a6cd376f-9e3f-4979-a9e9-00fd34bb0106"],

Cell[BoxData["True"], "Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"d3e61421-97d1-41ca-a421-e5d3e423263e"]
}, Open  ]]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 InterpretationBox[Cell[
  "\t", "ExampleDelimiter",ExpressionUUID->
   "1d3d34b0-0ec0-48c4-b064-ad56929d144f"],
  $Line = 0; Null]], "ExampleDelimiter",ExpressionUUID->"9f183aae-f4c4-4978-\
aa54-aeef6fb130ad"],

Cell["Keys may be given as hexadecimal strings:", "ExampleText",ExpressionUUID->"0d3bce65-682e-4fb4-bb42-89f05d9c01a9"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"Map", "[", 
  RowBox[{
   RowBox[{
    RowBox[{"ByteListToHexString", "[", 
     RowBox[{"Normal", "[", "#", "]"}], "]"}], " ", "&"}], ",", " ", 
   RowBox[{"Secp256k1PublicKeyList", "[", 
    RowBox[{"{", 
     RowBox[{"\"\<\
c9bdb49cfbaedca21c4b1f3a7803c34636b1d7dc55a717132443fc3f4c5867e8\>\"", ",", 
      " ", "\"\<\
18e14a7b6a307f426a94f8114701e7c8e774e7f9a47e2c2035db29a206321725\>\""}], 
     "}"}], "]"}]}], "]"}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"5d19ce78-3e28-4f88-92b1-0ac3a57817ce"],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{"\<\"\
03a1af804ac108a8a51782198c2d034b28bf90c8803f5a53f76276fa69a4eae77f\"\>", 
   ",", "\<\"\
0250863ad64a87ae8a2fe83c1af1a8403cb53f53e486d8511dad8a04887e5b2352\"\>"}], 
  "}"}]], "Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"21cb31bc-0730-4952-bea9-05d24517e21a"]
}, Open  ]]
}, Open  ]]
}, Open  ]],

Cell[CellGroupData[{

Cell[TextData[{
 Cell[BoxData[
  DynamicBox[ToBoxes[
    If[CurrentValue[
       EvaluationCell[], "CellGroupOpen"] =!= Closed, 
     Style[
      Graphics[{
        Thickness[0.18], 
        RGBColor[0.8509803921568627, 0.396078431372549, 0], 
        Line[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]}, AspectRatio -> 1, 
       PlotRange -> {{-3, 4}, {-1, 1}}, ImageSize -> 20], Magnification -> 
      0.68 Inherited], 
     Rotate[
      Style[
       Graphics[{
         Thickness[0.18], 
         RGBColor[0.8509803921568627, 0.396078431372549, 0], 
         Line[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]}, AspectRatio -> 1, 
        PlotRange -> {{-3, 4}, {-1, 1}}, ImageSize -> 20], Magnification -> 
       0.68 Inherited], Rational[1, 2] Pi, {-1.65, -1}]]]]],ExpressionUUID->
  "3afee811-e8f2-4110-be7f-1ddb167ad82d"],
 Cell[BoxData[
  TemplateBox[{1},
   "Spacer1"]],ExpressionUUID->"296f996f-4d80-4ed2-bace-d6382ac9f551"],
 "Scope",
 "\[NonBreakingSpace]\[NonBreakingSpace]",
 Cell["(3)", "ExampleCount",ExpressionUUID->
  "e21fb25f-093c-48a1-8bdb-5ab293dcb06c"]
}], "ExampleSection", "ExampleSection",
 WholeCellGroupOpener->True,
 CacheGraphics->False,
 CellID->1293636265,ExpressionUUID->"906aa12f-6fb0-4aef-9d13-dbfa5b3c0c23"],

Cell["The uncompressed form is available for the whole batch:", "ExampleText",ExpressionUUID->"33dc919d-a1e4-40d6-8355-08010ce4cc85"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{
  RowBox[{"Secp256k1PublicKeyList", "[", 
   RowBox[{
    RowBox[{"{", "1", "}"}], ",", " ", "\"\<Uncompressed\>\""}], "]"}], " ", "===",
   " ", 
  RowBox[{"{", 
   RowBox[{"Secp256k1PublicKey", "[", 
    RowBox[{"1", ",", " ", "\"\<Uncompressed\>\""}], "]"}], "}"}]}]], "Input",\

 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"586e941d-f817-4310-8d68-4cbd387f82fc"],

Cell[BoxData["True"], "Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"9b8a3e74-b945-4741-9cdd-db14e58e8ddb"]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 InterpretationBox[Cell[
  "\t", "ExampleDelimiter",ExpressionUUID->
   "dbef99ab-df84-457d-8778-b69d998818e8"],
  $Line = 0; Null]], "ExampleDelimiter",ExpressionUUID->"d38b85ac-3c29-470a-\
bf91-0c2d52314de2"],

Cell["\<\
A single-element list is a valid batch, though the single-key function is \
faster for it:\
\>", "ExampleText",ExpressionUUID->"2443333f-8e73-4ca9-9311-9ec96bed788a"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{
  RowBox[{"Secp256k1PublicKeyList", "[", 
   RowBox[{"{", 
    RowBox[{
     RowBox[{"$Secp256k1", "[", "\"\<Order\>\"", "]"}], " ", "-", " ", "1"}], 
    "}"}], "]"}], " ", "===", " ", 
  RowBox[{"{", 
   RowBox[{"Secp256k1PublicKey", "[", 
    RowBox[{
     RowBox[{"$Secp256k1", "[", "\"\<Order\>\"", "]"}], " ", "-", " ", "1"}], 
    "]"}], "}"}]}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"56c8e541-127f-4b7a-9296-d2e669574123"],

Cell[BoxData["True"], "Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"3ff34986-ef55-4e79-bb1f-3fd464d81233"]
}, Open  ]]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 InterpretationBox[Cell[
  "\t", "ExampleDelimiter",ExpressionUUID->
   "b7357ef5-cff0-4743-a73c-235c3e026614"],
  $Line = 0; Null]], "ExampleDelimiter",ExpressionUUID->"7ee9f875-9205-42b9-\
975a-fa0c3d9c2b76"],

Cell["\<\
One invalid scalar anywhere in the list leaves the whole call unevaluated:\
\>", "ExampleText",ExpressionUUID->"150ad7c6-c7ea-4aec-9f5c-116fbbc4e4ea"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"MatchQ", "[", 
  RowBox[{
   RowBox[{"Secp256k1PublicKeyList", "[", 
    RowBox[{"{", 
     RowBox[{"1", ",", " ", "0", ",", " ", "3"}], "}"}], "]"}], ",", " ", 
   "_Secp256k1PublicKeyList"}], "]"}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"178a7154-6705-4b14-847f-4e9d96a0eb52"],

Cell[BoxData["True"], "Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"6b448529-194c-48e6-b7b8-8362a54d94a2"]
}, Open  ]]
}, Open  ]]
}, Closed]],

Cell[CellGroupData[{

Cell[TextData[{
 Cell[BoxData[
  DynamicBox[ToBoxes[
    If[CurrentValue[
       EvaluationCell[], "CellGroupOpen"] =!= Closed, 
     Style[
      Graphics[{
        Thickness[0.18], 
        RGBColor[0.8509803921568627, 0.396078431372549, 0], 
        Line[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]}, AspectRatio -> 1, 
       PlotRange -> {{-3, 4}, {-1, 1}}, ImageSize -> 20], Magnification -> 
      0.68 Inherited], 
     Rotate[
      Style[
       Graphics[{
         Thickness[0.18], 
         RGBColor[0.8509803921568627, 0.396078431372549, 0], 
         Line[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]}, AspectRatio -> 1, 
        PlotRange -> {{-3, 4}, {-1, 1}}, ImageSize -> 20], Magnification -> 
       0.68 Inherited], Rational[1, 2] Pi, {-1.65, -1}]]]]],ExpressionUUID->
  "8e2a1ddc-a9f1-4b9b-83ce-928d0d456430"],
 Cell[BoxData[
  TemplateBox[{1},
   "Spacer1"]],ExpressionUUID->"e8a2d589-611d-4589-8ab6-e5f2764e379e"],
 "Applications",
 "\[NonBreakingSpace]\[NonBreakingSpace]",
 Cell["(1)", "ExampleCount",ExpressionUUID->
  "85f4cd1c-5c5e-483a-a1d4-b8888400cca7"]
}], "ExampleSection", "ExampleSection",
 WholeCellGroupOpener->True,
 CacheGraphics->False,
 CellID->258228157,ExpressionUUID->"693473ce-2ca1-451c-ada0-b7e4b31de01c"],

Cell["\<\
A contiguous range of scalars, the shape a low-entropy key sweep takes:\
\>", "ExampleText",ExpressionUUID->"9582bc51-c6e7-4615-9d1a-f79957694840"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"Map", "[", 
  RowBox[{
   RowBox[{
    RowBox[{"BitcoinAddress", "[", 
     RowBox[{"#", ",", " ", "\"\<P2PKH\>\""}], "]"}], " ", "&"}], ",", " ", 
   RowBox[{"Secp256k1PublicKeyList", "[", 
    RowBox[{"Range", "[", 
     RowBox[{"1", ",", " ", "5"}], "]"}], "]"}]}], "]"}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"db09b7f5-ae01-43ce-8449-33e79c7ec10f"],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{"\<\"1BgGZ9tcN4rm9KBzDn7KprQz87SZ26SAMH\"\>", 
   ",", "\<\"1cMh228HTCiwS8ZsaakH8A8wze1JR5ZsP\"\>", 
   ",", "\<\"1CUNEBjYrCn2y1SdiUMohaKUi4wpP326Lb\"\>", 
   ",", "\<\"1JtK9CQw1syfWj1WtFMWomrYdV3W2tWBF9\"\>", 
   ",", "\<\"17Vu7st1U1KwymUKU4jJheHHGRVNqrcfLD\"\>"}], "}"}]], "Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"2010fa27-33e4-4dd1-a8b8-f6196c2723fc"]
}, Open  ]]
}, Closed]],

Cell[CellGroupData[{

Cell[TextData[{
 Cell[BoxData[
  DynamicBox[ToBoxes[
    If[CurrentValue[
       EvaluationCell[], "CellGroupOpen"] =!= Closed, 
     Style[
      Graphics[{
        Thickness[0.18], 
        RGBColor[0.8509803921568627, 0.396078431372549, 0], 
        Line[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]}, AspectRatio -> 1, 
       PlotRange -> {{-3, 4}, {-1, 1}}, ImageSize -> 20], Magnification -> 
      0.68 Inherited], 
     Rotate[
      Style[
       Graphics[{
         Thickness[0.18], 
         RGBColor[0.8509803921568627, 0.396078431372549, 0], 
         Line[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]}, AspectRatio -> 1, 
        PlotRange -> {{-3, 4}, {-1, 1}}, ImageSize -> 20], Magnification -> 
       0.68 Inherited], Rational[1, 2] Pi, {-1.65, -1}]]]]],ExpressionUUID->
  "da9c7a9b-48a0-4372-918a-5055d9694cc7"],
 Cell[BoxData[
  TemplateBox[{1},
   "Spacer1"]],ExpressionUUID->"3b365fff-ee3b-4267-ba39-5ad7bb69b571"],
 "Properties & Relations",
 "\[NonBreakingSpace]\[NonBreakingSpace]",
 Cell["(1)", "ExampleCount",ExpressionUUID->
  "feb67b01-0cc6-4422-9edb-2c316fe60e40"]
}], "ExampleSection", "ExampleSection",
 WholeCellGroupOpener->True,
 CacheGraphics->False,
 CellID->2123667759,ExpressionUUID->"485fede2-55d1-4eaf-8742-ea2f741cfb55"],

Cell["\<\
Every key the batch path returns decodes to a point of the group:\
\>", "ExampleText",ExpressionUUID->"77d5ea12-55e7-47cf-b11c-943dc995bcd2"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"AllTrue", "[", 
  RowBox[{
   RowBox[{"Secp256k1PublicKeyList", "[", 
    RowBox[{"Range", "[", "50", "]"}], "]"}], ",", " ", 
   RowBox[{
    RowBox[{"Secp256k1PointQ", "[", 
     RowBox[{"Secp256k1Point", "[", "#", "]"}], "]"}], " ", "&"}]}], 
  "]"}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"4b60ec6b-33c2-49cf-b933-1f6514d02dbe"],

Cell[BoxData["True"], "Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"2cdaa682-b1de-4625-8644-ba11b6dd75a8"]
}, Open  ]]
}, Closed]],

Cell[CellGroupData[{

Cell[TextData[{
 Cell[BoxData[
  DynamicBox[ToBoxes[
    If[CurrentValue[
       EvaluationCell[], "CellGroupOpen"] =!= Closed, 
     Style[
      Graphics[{
        Thickness[0.18], 
        RGBColor[0.8509803921568627, 0.396078431372549, 0], 
        Line[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]}, AspectRatio -> 1, 
       PlotRange -> {{-3, 4}, {-1, 1}}, ImageSize -> 20], Magnification -> 
      0.68 Inherited], 
     Rotate[
      Style[
       Graphics[{
         Thickness[0.18], 
         RGBColor[0.8509803921568627, 0.396078431372549, 0], 
         Line[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]}, AspectRatio -> 1, 
        PlotRange -> {{-3, 4}, {-1, 1}}, ImageSize -> 20], Magnification -> 
       0.68 Inherited], Rational[1, 2] Pi, {-1.65, -1}]]]]],ExpressionUUID->
  "f6a31152-fead-44f1-a702-6c0c3431eabf"],
 Cell[BoxData[
  TemplateBox[{1},
   "Spacer1"]],ExpressionUUID->"5f95017d-c776-4a6f-9f82-23e39e7591c7"],
 "Possible Issues",
 "\[NonBreakingSpace]\[NonBreakingSpace]",
 Cell["(1)", "ExampleCount",ExpressionUUID->
  "f0eda13f-f09e-435c-a44b-5c15d9b8e7a4"]
}], "ExampleSection", "ExampleSection",
 WholeCellGroupOpener->True,
 CacheGraphics->False,
 CellID->1305812373,ExpressionUUID->"9c3c19bc-6e17-4c05-9571-2a499db9659c"],

Cell["\<\
The first call of a session pays for the precomputed table, so a timing \
measurement should discard it:\
\>", "ExampleText",ExpressionUUID->"a490bbd0-5a36-4b33-9552-f838efe34c02"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{
  RowBox[{"Secp256k1PublicKeyList", "[", 
   RowBox[{"{", "1", "}"}], "]"}], " ", "===", " ", 
  RowBox[{"{", 
   RowBox[{"Secp256k1PublicKey", "[", "1", "]"}], "}"}]}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"c361e841-a351-4d6c-a815-291b271141a4"],

Cell[BoxData["True"], "Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"964d0f1b-e4ed-42ec-9e38-88afb32c6cca"]
}, Open  ]]
}, Closed]]
}, Open  ]],

Cell[BoxData[GridBox[{
   {
    DynamicBox[FEPrivate`ImportImage[
      FrontEnd`FileName[{"Documentation", "FooterIcons"}, 
       "RelatedFunction.png"]]], GridBox[{
      {
       StyleBox[
        RowBox[{"See", " ", "Also"}], "SeeAlsoSection"]},
      {Cell[TextData[{
        Cell[BoxData[
         TemplateBox[{
           Cell[
            TextData["Secp256k1PublicKey"]], 
           "paclet:WolframInstitute/Puzzles/ref/Secp256k1PublicKey", 
           "WolframInstitute/Puzzles Package Symbol"},
          "PackageLink",
          BaseStyle->"InlineFormula"]], "InlineFormula",
         FontFamily->"Source Sans Pro",ExpressionUUID->
         "fe108147-7b23-4fa6-8707-e16ab688342c"],
        "\[NonBreakingSpace]",
        StyleBox[
        "\[MediumSpace]\[FilledVerySmallSquare]\[MediumSpace]", 
         "InlineSeparator"],
        " ",
        Cell[BoxData[
         TemplateBox[{
           Cell[
            TextData["Secp256k1Point"]], 
           "paclet:WolframInstitute/Puzzles/ref/Secp256k1Point", 
           "WolframInstitute/Puzzles Package Symbol"},
          "PackageLink",
          BaseStyle->"InlineFormula"]], "InlineFormula",
         FontFamily->"Source Sans Pro",ExpressionUUID->
         "725f3987-e204-470c-b39c-8ad089ecf888"],
        "\[NonBreakingSpace]",
        StyleBox[
        "\[MediumSpace]\[FilledVerySmallSquare]\[MediumSpace]", 
         "InlineSeparator"],
        " ",
        Cell[BoxData[
         TemplateBox[{
           Cell[
            TextData["Secp256k1PointQ"]], 
           "paclet:WolframInstitute/Puzzles/ref/Secp256k1PointQ", 
           "WolframInstitute/Puzzles Package Symbol"},
          "PackageLink",
          BaseStyle->"InlineFormula"]], "InlineFormula",
         FontFamily->"Source Sans Pro",ExpressionUUID->
         "e2e943e1-894e-45c8-b987-b58ef05e9f6a"],
        "\[NonBreakingSpace]",
        StyleBox[
        "\[MediumSpace]\[FilledVerySmallSquare]\[MediumSpace]", 
         "InlineSeparator"],
        " ",
        Cell[BoxData[
         TemplateBox[{
           Cell[
            TextData["BitcoinAddress"]], 
           "paclet:WolframInstitute/Puzzles/ref/BitcoinAddress", 
           "WolframInstitute/Puzzles Package Symbol"},
          "PackageLink",
          BaseStyle->"InlineFormula"]], "InlineFormula",
         FontFamily->"Source Sans Pro",ExpressionUUID->
         "ef1a29ee-e388-4ce9-b24e-b40aea0c2829"]
       }], "SeeAlso",ExpressionUUID->"60ccc86b-934e-4701-b47d-d1f4ad9d95f7"]}
     }]}
  }]], "SeeAlsoSection",ExpressionUUID->"f4c09ee2-f8fc-4455-bd25-\
5d76b4e60e3a"],

Cell[BoxData[GridBox[{
   {
    DynamicBox[FEPrivate`ImportImage[
      FrontEnd`FileName[{"Documentation", "FooterIcons"}, 
       "RelatedGuide.png"]]], GridBox[{
      {
       StyleBox[
        RowBox[{"Related", " ", "Guides"}], "MoreAboutSection"]},
      {
       RowBox[{"\[FilledVerySmallSquare]", Cell[BoxData[
         TemplateBox[{
           Cell[
            TextData["Derivation"]], 
           "paclet:WolframInstitute/Puzzles/guide/Derivation"},
          "RefLinkPlain",
          BaseStyle->{"MoreAbout"}]], "MoreAbout",ExpressionUUID->
         "8a38588b-85f8-468a-80d4-7555b83e9d7b"]}]}
     }]}
  }]], "MoreAboutSection",ExpressionUUID->"fc13eab6-2a86-4ae7-bda5-\
a6a2f4963b24"],

Cell[" ", "FooterCell",ExpressionUUID->"0ee02c58-0690-48c8-8406-1855bee4aff3"]
},
Saveable->False,
ScreenStyleEnvironment->"Working",
WindowSize->{900, 830},
WindowMargins->{{0, Automatic}, {Automatic, 0}},
WindowTitle->"Secp256k1PublicKeyList",
TaggingRules->{
 "ModificationHighlight" -> False, "ColorType" -> "", "LinkTrails" -> "", 
  "ExampleCounter" -> 1, 
  "Openers" -> {
   "PrimaryExamplesSection" -> Open, "ExampleSection" -> {"0" -> Open}, 
    "AllOptsTable" -> Closed}, "NewStyles" -> True, 
  "CitationPopupData" -> $Failed, "ShowCitation" -> False, "HasOptions" -> 
  True, "RootCaptions" -> "", "HeaderCoreAreaLink" -> {}, 
  "Metadata" -> {
   "built" -> "{2026, 8, 27, 0, 11, 56.119477}", 
    "history" -> {"XX", "", "", ""}, "context" -> "WolframInstitute`Puzzles`",
     "keywords" -> {}, "specialkeywords" -> {}, 
    "tutorialcollectionlinks" -> {}, "index" -> True, "label" -> 
    "Wolfram Institute/ Puzzles Symbol", "language" -> "en", "paclet" -> 
    "WolframInstitute/Puzzles", "status" -> "None", "summary" -> 
    "PackageLink[Secp256k1PublicKeyList, paclet : \
WolframInstitute/Puzzles/ref/Secp256k1PublicKeyList, WolframInstitute/Puzzles \
Package Symbol][{key1, key2, ...}] gives the list of compressed public keys \
of a list of secp256k1 private keys. PackageLink[Secp256k1PublicKeyList, \
paclet : WolframInstitute/Puzzles/ref/Secp256k1PublicKeyList, \
WolframInstitute/Puzzles Package Symbol][{key1, key2, ...}, form] gives them \
in form, either Compressed or Uncompressed.", "synonyms" -> {}, 
    "tabletags" -> {}, "title" -> "Secp256k1PublicKeyList", "titlemodifier" -> 
    "", "metadescription" -> "", "windowtitle" -> "Secp256k1PublicKeyList", 
    "type" -> "Symbol", "uri" -> 
    "WolframInstitute/Puzzles/ref/Secp256k1PublicKeyList", 
    "WorkflowDockedCell" -> ""}, "SearchTextTranslated" -> ""},
CellContext->CellGroup,
FrontEndVersion->"15.0 for Mac OS X ARM (64-bit) (May 19, 2026)",
StyleDefinitions->FrontEnd`FileName[{"Wolfram"}, "Reference.nb"],
ExpressionUUID->"2836f4b7-a5b3-4322-af34-2f5dc3539620"
]
(* End of Notebook Content *)

(* Internal cache information *)
(*CellTagsOutline
CellTagsIndex->{
 "TextAnnotation"->{
  Cell[15841, 427, 145, 2, 70, "ExampleText",ExpressionUUID->"aea96448-7554-4e59-a7b2-05d692153dc9",
   CellTags->"TextAnnotation"]}
 }
*)
(*CellTagsIndex
CellTagsIndex->{
 {"TextAnnotation", 43745, 1150}
 }
*)
(*NotebookFileOutline
Notebook[{
Cell[590, 21, 5677, 140, 70, "AnchorBarGrid",ExpressionUUID->"bb6274c0-5672-4452-8da0-f35a16d278f6",
 CellID->1],
Cell[6270, 163, 107, 0, 70, "ContextNameCell",ExpressionUUID->"9ede5365-1805-45ba-a759-5e5ccd3cb96f"],
Cell[CellGroupData[{
Cell[6402, 167, 565, 14, 70, "ObjectNameGrid",ExpressionUUID->"48ac0785-851a-40d1-9387-38938137aede"],
Cell[6970, 183, 2407, 65, 70, "Usage",ExpressionUUID->"5637d2d8-a114-4fc0-b90f-578c9021520a"]
}, Open  ]],
Cell[CellGroupData[{
Cell[9414, 253, 1443, 34, 70, "NotesSection",ExpressionUUID->"b67d4849-895b-49e9-aa8d-898f08fe19d4",
 CellGroupingRules->{"SectionGrouping", 50},
 CellID->105215695],
Cell[10860, 289, 533, 14, 70, "Notes",ExpressionUUID->"a4a4e9c5-f487-4dd6-b703-b53ddad7eaa6"],
Cell[11396, 305, 292, 4, 70, "Notes",ExpressionUUID->"ce5b5254-896e-4734-b292-7326aafdfb9f"],
Cell[11691, 311, 147, 2, 70, "Notes",ExpressionUUID->"0bb9f8d3-fcd4-46cb-b00e-565170f0960f"],
Cell[11841, 315, 251, 4, 70, "Notes",ExpressionUUID->"dc8b6d8b-253f-4254-a31c-c63870eaa707"],
Cell[12095, 321, 546, 14, 70, "Notes",ExpressionUUID->"8cbf0227-e8a6-4cec-9e53-07c566ceb5cc"],
Cell[12644, 337, 194, 3, 70, "Notes",ExpressionUUID->"3779a142-360e-433a-9a31-c0b03ec2afbc"]
}, Closed]],
Cell[12853, 343, 80, 0, 70, "PageDelimiter",ExpressionUUID->"da63fbc6-bcf1-4588-9177-7d78b56fee5f"],
Cell[CellGroupData[{
Cell[12958, 347, 1400, 37, 70, "PrimaryExamplesSection",ExpressionUUID->"91828c78-fd15-4122-88ea-782cc9c5eda8",
 CellID->981144384],
Cell[14361, 386, 216, 4, 70, "Input",ExpressionUUID->"590565d7-78a1-47aa-9ed5-b4e67a69fa9b",
 CellID->1969679695],
Cell[CellGroupData[{
Cell[14602, 394, 1236, 31, 70, "ExampleSection",ExpressionUUID->"3b114e8c-4602-4f97-8193-a11090e74bb3",
 CellID->1714220222],
Cell[15841, 427, 145, 2, 70, "ExampleText",ExpressionUUID->"aea96448-7554-4e59-a7b2-05d692153dc9",
 CellTags->"TextAnnotation"],
Cell[CellGroupData[{
Cell[16011, 433, 287, 6, 70, "Input",ExpressionUUID->"c6be8dac-83f3-4ad7-a5d5-89ce4a202f14"],
Cell[16301, 441, 9406, 199, 70, "Output",ExpressionUUID->"3207fd7c-9207-4bf9-bf68-3b35fbff1fd6"]
}, Open  ]],
Cell[CellGroupData[{
Cell[25744, 645, 224, 5, 70, "ExampleDelimiter",ExpressionUUID->"73ca44d8-3e63-4999-9f20-db398a3d5673"],
Cell[25971, 652, 151, 2, 70, "ExampleText",ExpressionUUID->"c0138e32-9342-4916-b5d4-4c5977731f7b"],
Cell[CellGroupData[{
Cell[26147, 658, 382, 8, 70, "Input",ExpressionUUID->"a6cd376f-9e3f-4979-a9e9-00fd34bb0106"],
Cell[26532, 668, 110, 1, 70, "Output",ExpressionUUID->"d3e61421-97d1-41ca-a421-e5d3e423263e"]
}, Open  ]]
}, Open  ]],
Cell[CellGroupData[{
Cell[26691, 675, 224, 5, 70, "ExampleDelimiter",ExpressionUUID->"9f183aae-f4c4-4978-aa54-aeef6fb130ad"],
Cell[26918, 682, 119, 0, 70, "ExampleText",ExpressionUUID->"0d3bce65-682e-4fb4-bb42-89f05d9c01a9"],
Cell[CellGroupData[{
Cell[27062, 686, 584, 14, 70, "Input",ExpressionUUID->"5d19ce78-3e28-4f88-92b1-0ac3a57817ce"],
Cell[27649, 702, 309, 7, 70, "Output",ExpressionUUID->"21cb31bc-0730-4952-bea9-05d24517e21a"]
}, Open  ]]
}, Open  ]]
}, Open  ]],
Cell[CellGroupData[{
Cell[28019, 716, 1227, 31, 70, "ExampleSection",ExpressionUUID->"906aa12f-6fb0-4aef-9d13-dbfa5b3c0c23",
 CellID->1293636265],
Cell[29249, 749, 133, 0, 70, "ExampleText",ExpressionUUID->"33dc919d-a1e4-40d6-8355-08010ce4cc85"],
Cell[CellGroupData[{
Cell[29407, 753, 433, 11, 70, "Input",ExpressionUUID->"586e941d-f817-4310-8d68-4cbd387f82fc"],
Cell[29843, 766, 110, 1, 70, "Output",ExpressionUUID->"9b8a3e74-b945-4741-9cdd-db14e58e8ddb"]
}, Open  ]],
Cell[CellGroupData[{
Cell[29990, 772, 224, 5, 70, "ExampleDelimiter",ExpressionUUID->"d38b85ac-3c29-470a-bf91-0c2d52314de2"],
Cell[30217, 779, 176, 3, 70, "ExampleText",ExpressionUUID->"2443333f-8e73-4ca9-9311-9ec96bed788a"],
Cell[CellGroupData[{
Cell[30418, 786, 514, 13, 70, "Input",ExpressionUUID->"56c8e541-127f-4b7a-9296-d2e669574123"],
Cell[30935, 801, 110, 1, 70, "Output",ExpressionUUID->"3ff34986-ef55-4e79-bb1f-3fd464d81233"]
}, Open  ]]
}, Open  ]],
Cell[CellGroupData[{
Cell[31094, 808, 224, 5, 70, "ExampleDelimiter",ExpressionUUID->"7ee9f875-9205-42b9-975a-fa0c3d9c2b76"],
Cell[31321, 815, 160, 2, 70, "ExampleText",ExpressionUUID->"150ad7c6-c7ea-4aec-9f5c-116fbbc4e4ea"],
Cell[CellGroupData[{
Cell[31506, 821, 361, 8, 70, "Input",ExpressionUUID->"178a7154-6705-4b14-847f-4e9d96a0eb52"],
Cell[31870, 831, 110, 1, 70, "Output",ExpressionUUID->"6b448529-194c-48e6-b7b8-8362a54d94a2"]
}, Open  ]]
}, Open  ]]
}, Closed]],
Cell[CellGroupData[{
Cell[32041, 839, 1233, 31, 70, "ExampleSection",ExpressionUUID->"693473ce-2ca1-451c-ada0-b7e4b31de01c",
 CellID->258228157],
Cell[33277, 872, 157, 2, 70, "ExampleText",ExpressionUUID->"9582bc51-c6e7-4615-9d1a-f79957694840"],
Cell[CellGroupData[{
Cell[33459, 878, 436, 10, 70, "Input",ExpressionUUID->"db09b7f5-ae01-43ce-8449-33e79c7ec10f"],
Cell[33898, 890, 402, 7, 70, "Output",ExpressionUUID->"2010fa27-33e4-4dd1-a8b8-f6196c2723fc"]
}, Open  ]]
}, Closed]],
Cell[CellGroupData[{
Cell[34349, 903, 1244, 31, 70, "ExampleSection",ExpressionUUID->"485fede2-55d1-4eaf-8742-ea2f741cfb55",
 CellID->2123667759],
Cell[35596, 936, 151, 2, 70, "ExampleText",ExpressionUUID->"77d5ea12-55e7-47cf-b11c-943dc995bcd2"],
Cell[CellGroupData[{
Cell[35772, 942, 415, 10, 70, "Input",ExpressionUUID->"4b60ec6b-33c2-49cf-b933-1f6514d02dbe"],
Cell[36190, 954, 110, 1, 70, "Output",ExpressionUUID->"2cdaa682-b1de-4625-8644-ba11b6dd75a8"]
}, Open  ]]
}, Closed]],
Cell[CellGroupData[{
Cell[36349, 961, 1237, 31, 70, "ExampleSection",ExpressionUUID->"9c3c19bc-6e17-4c05-9571-2a499db9659c",
 CellID->1305812373],
Cell[37589, 994, 190, 3, 70, "ExampleText",ExpressionUUID->"a490bbd0-5a36-4b33-9552-f838efe34c02"],
Cell[CellGroupData[{
Cell[37804, 1001, 330, 7, 70, "Input",ExpressionUUID->"c361e841-a351-4d6c-a815-291b271141a4"],
Cell[38137, 1010, 110, 1, 70, "Output",ExpressionUUID->"964d0f1b-e4ed-42ec-9e38-88afb32c6cca"]
}, Open  ]]
}, Closed]]
}, Open  ]],
Cell[38286, 1016, 2571, 67, 70, "SeeAlsoSection",ExpressionUUID->"f4c09ee2-f8fc-4455-bd25-5d76b4e60e3a"],
Cell[40860, 1085, 700, 19, 70, "MoreAboutSection",ExpressionUUID->"fc13eab6-2a86-4ae7-bda5-a6a2f4963b24"],
Cell[41563, 1106, 78, 0, 70, "FooterCell",ExpressionUUID->"0ee02c58-0690-48c8-8406-1855bee4aff3"]
}
]
*)

(* End of internal cache information *)

