(* 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[     48491,       1285]
NotebookOptionsPosition[     39135,       1114]
NotebookOutlinePosition[     41440,       1166]
CellTagsIndexPosition[     41362,       1161]
WindowTitle->PBKDF2Key
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->
           "561c19d1-7637-4795-94f7-21865a0beafa"], 
          TemplateBox[{8},
           "Spacer1"]}]],
         TextAlignment->Center,ExpressionUUID->
         "2c39e8f9-96c9-4a66-a6e8-4fb73bce02ae"],
        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->
           "f386b121-a1c7-44b8-931b-340c45fbd55e"]
         }],ExpressionUUID->"8ae7d229-d6d6-470e-9808-06e740c17dfc"],
         StripOnInput->False],{
        StyleBox[
          "\"GenerateDerivedKey\"", "SeeAlsoRelated", StripOnInput -> False] :> 
         Documentation`HelpLookup["paclet:ref/GenerateDerivedKey"], 
         StyleBox["\"ByteArray\"", "SeeAlsoRelated", StripOnInput -> False] :> 
         Documentation`HelpLookup["paclet:ref/ByteArray"], Delimiter, 
         StyleBox[
          "\"Functions\"", "SeeAlsoSection", FontSize -> 14, FontSlant -> 
           "Italic", StripOnInput -> False] :> 
         NotebookFind[EvaluationNotebook[], "SeeAlsoSection", All, CellStyle],
          StyleBox[
          StyleBox["\"HMACHash\"", "SeeAlsoRelated", StripOnInput -> False], 
           "SeeAlsoRelated", StripOnInput -> False] :> 
         Documentation`HelpLookup[
          "paclet:WolframInstitute/Puzzles/ref/HMACHash"], 
         StyleBox[
          StyleBox["\"BIP39Seed\"", "SeeAlsoRelated", StripOnInput -> False], 
           "SeeAlsoRelated", StripOnInput -> False] :> 
         Documentation`HelpLookup[
          "paclet:WolframInstitute/Puzzles/ref/BIP39Seed"], 
         StyleBox[
          StyleBox[
           "\"ElectrumV2Seed\"", "SeeAlsoRelated", StripOnInput -> False], 
           "SeeAlsoRelated", StripOnInput -> False] :> 
         Documentation`HelpLookup[
          "paclet:WolframInstitute/Puzzles/ref/ElectrumV2Seed"]},
        Appearance->None,
        MenuAppearance->Automatic,
        MenuStyle->"SeeAlso"],
       MouseAppearanceTag["LinkHand"]]],
      LineSpacing->{1.4, 0},ExpressionUUID->
      "db0d6ddf-6083-45d1-af7c-800e3aeb6812"],
     "\[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->
           "f9c65570-684f-43bc-9655-5238b19a831e"]
         }],ExpressionUUID->"5795ac49-94e6-48e7-b0fe-84f899237122"],
         StripOnInput->False],{
        "\"Seeds\"" :> 
         Documentation`HelpLookup[
          "paclet:WolframInstitute/Puzzles/guide/Seeds"]},
        Appearance->None,
        MenuAppearance->Automatic,
        MenuStyle->"MoreAbout"],
       MouseAppearanceTag["LinkHand"]]],
      LineSpacing->{1.4, 0},ExpressionUUID->
      "ee474809-3e25-4130-a5aa-c5b5c8c2a170"],
     "\[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->
           "e21304dd-2d11-42af-a06a-4b513dff0ab4"]
         }],ExpressionUUID->"99b6173e-9f9f-432d-bbba-24b7b25a1f82"],
         StripOnInput->False],{
        "\"WolframInstitute/Puzzles/ref/PBKDF2Key\"" :> None, 
         "\"Copy Wolfram Documentation Center URL\"" :> 
         CopyToClipboard["WolframInstitute/Puzzles/ref/PBKDF2Key"], 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/PBKDF2Key.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/PBKDF2Key" <> ".html"], None}]}]},
        Appearance->None,
        MenuAppearance->Automatic,
        MenuStyle->"URLMenu"],
       MouseAppearanceTag["LinkHand"]]],
      LineSpacing->{1.4, 0},ExpressionUUID->
      "ff659562-6ba8-4bc1-bad5-ce1016798548"]
    }], "AnchorBar",
     CacheGraphics->False,ExpressionUUID->
     "8fc73795-d777-4af6-86c9-9558d87bd273"]}
  }]], "AnchorBarGrid",
 CellID->1,ExpressionUUID->"0fe3b507-ae84-4b8c-bc69-21ba2e7f5b88"],

Cell["WolframInstitute`Puzzles`", "ContextNameCell",ExpressionUUID->"3ad849d1-d132-48a6-b8c9-e8bb9f6b262b"],

Cell[CellGroupData[{

Cell[BoxData[GridBox[{
   {Cell[TextData[{
     Cell[
     "PBKDF2Key", "ObjectName",ExpressionUUID->
      "7968077f-81b7-4ba3-b52d-affa9b24d7c6"],
     Cell[BoxData[
      TemplateBox[{8},
       "Spacer1"]],ExpressionUUID->"7249237d-0c8b-4f26-826a-1077f1d596b2"],
     Cell[BoxData[
     ""], "ObjectNameTranslation",ExpressionUUID->
      "704f77ae-883f-4ad4-9257-ca1aa27fdccd"]
    }],ExpressionUUID->"833a469c-c525-4d67-acee-d979f7a1a4e6"], 
    "\[SpanFromLeft]"}
  }]], "ObjectNameGrid",ExpressionUUID->"62c9e614-fe8f-4b95-b920-\
10c3f7390fec"],

Cell[BoxData[GridBox[{
   {"", Cell[TextData[{
     Cell[BoxData[
      RowBox[{
       TemplateBox[{
         Cell[
          TextData["PBKDF2Key"]], 
         "paclet:WolframInstitute/Puzzles/ref/PBKDF2Key", 
         "WolframInstitute/Puzzles Package Symbol"},
        "PackageLink",
        BaseStyle->"InlineFormula"], "[", 
       RowBox[{
        StyleBox["password", "TI"], ",", " ", 
        StyleBox["salt", "TI"], ",", " ", 
        StyleBox["iterations", "TI"], ",", " ", 
        StyleBox["size", "TI"]}], "]"}]], "InlineFormula",
      FontFamily->"Source Sans Pro",
      FontSize->0.9 Inherited,ExpressionUUID->
      "61ee93ce-ea90-402d-a730-ebb51b9fe0d6"],
     "\[LineSeparator]",
     "gives the ",
     StyleBox["size", "TI"],
     "-byte PBKDF2-HMAC-SHA512 derived key of ",
     StyleBox["password", "TI"],
     " and ",
     StyleBox["salt", "TI"],
     " after ",
     StyleBox["iterations", "TI"],
     " iterations, as a ",
     Cell[BoxData[
      TemplateBox[{
        Cell[
         TextData["ByteArray"]], "paclet:ref/ByteArray"},
       "RefLink",
       BaseStyle->"InlineFormula"]], "InlineFormula",
      FontFamily->"Source Sans Pro",ExpressionUUID->
      "ca27b885-0cb5-4bcc-b7d7-ab748a20fc63"],
     "."
    }],ExpressionUUID->"7a55ebc7-9e67-424a-b9c0-1a4b89458744"]},
   {"", Cell[TextData[{
     Cell[BoxData[
      RowBox[{
       TemplateBox[{
         Cell[
          TextData["PBKDF2Key"]], 
         "paclet:WolframInstitute/Puzzles/ref/PBKDF2Key", 
         "WolframInstitute/Puzzles Package Symbol"},
        "PackageLink",
        BaseStyle->"InlineFormula"], "[", 
       RowBox[{
        StyleBox["password", "TI"], ",", " ", 
        StyleBox["salt", "TI"], ",", " ", 
        StyleBox["iterations", "TI"], ",", " ", 
        StyleBox["size", "TI"], ",", " ", 
        StyleBox["type", "TI"]}], "]"}]], "InlineFormula",
      FontFamily->"Source Sans Pro",
      FontSize->0.9 Inherited,ExpressionUUID->
      "eb886a2e-0612-4cf3-b054-8120f7574421"],
     "\[LineSeparator]",
     "builds the derivation on HMAC over ",
     StyleBox["type", "TI"],
     ", one of ",
     Cell[BoxData["\"\<SHA256\>\""], "InlineFormula",
      FontFamily->"Source Sans Pro",
      FontSize->0.9 Inherited,ExpressionUUID->
      "78231b4f-2a1e-42f1-9388-70c6cb3e34e8"],
     " or ",
     Cell[BoxData["\"\<SHA512\>\""], "InlineFormula",
      FontFamily->"Source Sans Pro",
      FontSize->0.9 Inherited,ExpressionUUID->
      "61a41a7f-23ce-449c-a97b-f771659071ad"],
     "."
    }],ExpressionUUID->"50ce6e90-9dda-45db-945f-d5ac49a69ec8"]}
  }]], "Usage",ExpressionUUID->"af3c1e67-ebb9-424e-8c85-ac3beb1b237c"]
}, 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->"0aa56048-8789-444c-bf64-908b2b8f02fc"],
  Cell[BoxData[
   TemplateBox[{1},
    "Spacer1"]],ExpressionUUID->"ccbbc947-7caa-4be7-865f-5aa501dd9e19"],
  "Details and Options"
 }], "NotesFrameText",ExpressionUUID->
  "83b4f3c6-bb7f-47ad-bf0f-445f77b805d8"]],ExpressionUUID->"d92c839d-d96b-\
4f22-abc2-7292c1f05d7c"]], "NotesSection",
 ShowGroupOpener->"Thumbnail",
 WholeCellGroupOpener->True,
 CellGroupingRules->{"SectionGrouping", 50},
 CacheGraphics->False,
 CellID->725500026,ExpressionUUID->"5e760b56-9f65-49c1-9065-ab566bc449b8"],

Cell[TextData[{
 "PBKDF2 is RFC 2898 section 5.2, republished as RFC 8018: the derived key is \
the leading ",
 StyleBox["size", "TI"],
 " bytes of ",
 Cell[BoxData[
  RowBox[{
   SubscriptBox[
    StyleBox["T", "TI"], "1"], 
   RowBox[{"\\", "Vert"}], 
   SubscriptBox[
    StyleBox["T", "TI"], "2"], 
   RowBox[{"\\", "Vert"}], "\[Ellipsis]"}]], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "7d6d2d32-794f-482f-8a04-4aac02531865"],
 ", where ",
 Cell[BoxData[
  SubscriptBox[
   StyleBox["T", "TI"], 
   StyleBox["i", "TI"]]], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "d4a63ee1-c41b-4608-b0af-98cdbf62be52"],
 " is the exclusive-or of the ",
 StyleBox["iterations", "TI"],
 " values ",
 Cell[BoxData[
  RowBox[{
   SubscriptBox[
    StyleBox["U", "TI"], "1"], "=", 
   StyleBox["PRF",
    FontSlant->"Plain"], 
   StyleBox["(",
    SpanMaxSize->1], 
   RowBox[{
    StyleBox["P", "TI"], ",", 
    RowBox[{
     StyleBox["S", "TI"], 
     RowBox[{"\\", "Vert"}], 
     StyleBox["INT",
      FontSlant->"Plain"], 
     StyleBox["(",
      SpanMaxSize->1], 
     StyleBox["i", "TI"], 
     StyleBox[")",
      SpanMaxSize->1]}]}], 
   StyleBox[")",
    SpanMaxSize->1]}]], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "0416a682-53c6-4327-a886-232cc2676ff8"],
 " and ",
 Cell[BoxData[
  RowBox[{
   SubscriptBox[
    StyleBox["U", "TI"], 
    StyleBox["j", "TI"]], "=", 
   StyleBox["PRF",
    FontSlant->"Plain"], 
   StyleBox["(",
    SpanMaxSize->1], 
   RowBox[{
    StyleBox["P", "TI"], ",", 
    SubscriptBox[
     StyleBox["U", "TI"], 
     RowBox[{
      StyleBox["j", "TI"], "-", "1"}]]}], 
   StyleBox[")",
    SpanMaxSize->1]}]], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "1c29d658-0f3a-4064-a3b5-9ffdb8e7093f"],
 "."
}], "Notes",ExpressionUUID->"f3f0dec0-46fe-4641-8bfe-05d0a1e5c816"],

Cell[TextData[{
 "The block index ",
 Cell[BoxData[
  RowBox[{
   StyleBox["INT",
    FontSlant->"Plain"], 
   StyleBox["(",
    SpanMaxSize->1], 
   StyleBox["i", "TI"], 
   StyleBox[")",
    SpanMaxSize->1]}]], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "515151af-5795-44a2-841f-e6f8b644b182"],
 " is four bytes, big-endian, and blocks are produced only as far as ",
 StyleBox["size", "TI"],
 " requires."
}], "Notes",ExpressionUUID->"eb89db29-1d29-4824-8bee-72648ba1a846"],

Cell[TextData[{
 StyleBox["password", "TI"],
 " and ",
 StyleBox["salt", "TI"],
 " may each be a ",
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData["ByteArray"]], "paclet:ref/ByteArray"},
   "RefLink",
   BaseStyle->"InlineFormula"]], "InlineFormula",
  FontFamily->"Source Sans Pro",ExpressionUUID->
  "63b6072c-c1f8-4d5d-9d64-0740a276267c"],
 " or a ",
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData["String"]], "paclet:ref/String"},
   "RefLink",
   BaseStyle->"InlineFormula"]], "InlineFormula",
  FontFamily->"Source Sans Pro",ExpressionUUID->
  "0bedc0d3-f60f-46ef-8e78-c0e839597dc1"],
 "; a string stands for its UTF-8 bytes."
}], "Notes",ExpressionUUID->"a0c12511-3359-43b5-90df-00e782960ffc"],

Cell[TextData[{
 StyleBox["iterations", "TI"],
 " and ",
 StyleBox["size", "TI"],
 " must be positive integers; anything else matches no definition and the \
call is returned unevaluated, as does a ",
 StyleBox["type", "TI"],
 " other than ",
 Cell[BoxData["\<\"SHA256\"\>"], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "15f8227a-8942-4f15-bc25-2f1447b7b4d2"],
 " or ",
 Cell[BoxData["\<\"SHA512\"\>"], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "da303a58-5fd8-42d4-89f8-5a20119844cc"],
 "."
}], "Notes",ExpressionUUID->"d00ce741-0799-4f03-ad6b-24eb3f0344b1"],

Cell[TextData[{
 "BIP39 and Electrum version 2 both use ",
 StyleBox["iterations", "TI"],
 " 2048 and ",
 StyleBox["size", "TI"],
 " 64 over ",
 Cell[BoxData["\<\"SHA512\"\>"], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "757491e3-8ba0-4c83-9177-9808658d6454"],
 ", differing only in the salt."
}], "Notes",ExpressionUUID->"4b000061-0e29-4f4b-b142-2c5be20fc161"],

Cell[TextData[{
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData["GenerateDerivedKey"]], "paclet:ref/GenerateDerivedKey"},
   "RefLink",
   BaseStyle->"InlineFormula"]], "InlineFormula",
  FontFamily->"Source Sans Pro",ExpressionUUID->
  "4943a131-8003-48ef-b6f8-8d9dbe4d4b2a"],
 " offers scrypt only, so it cannot be used for either."
}], "Notes",ExpressionUUID->"55cffa05-07f4-423b-8ec7-d4cbaea3dad4"],

Cell["\<\
The kernel carries an OpenSSL binding for PBKDF2-HMAC-SHA512 at a 64-byte \
output, about 0.6 ms against 2.1 s for 2048 iterations, roughly three \
thousand times faster than the definition spelled out in the Wolfram \
Language. It is used only for that exact shape and only after it reproduces a \
known BIP39 answer in the session; every other shape takes the portable path, \
and both give the same bytes.\
\>", "Notes",ExpressionUUID->"f3a1fb09-2574-4887-869b-198ae3f5c7af"]
}, Closed]],

Cell["", "PageDelimiter",ExpressionUUID->"4acaf8cb-d00f-476d-abf8-55e3fd60e230"],

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->"9911a721-64c4-487e-9d30-d5719b1fea9f"],
 Cell[BoxData[
  TemplateBox[{1},
   "Spacer1"]],ExpressionUUID->"3a12a14b-1916-4d4e-978e-8a12bf788ea9"],
 "Examples",
 "\[NonBreakingSpace]\[NonBreakingSpace]",
 Cell["(11)", "ExampleCount",ExpressionUUID->
  "ce2693a4-22b7-45c3-a83a-b4834aa9ab8d"]
}], "PrimaryExamplesSection",
 WholeCellGroupOpener->True,
 CacheGraphics->False,
 CellID->66789316,ExpressionUUID->"d3861254-aca9-4efa-b626-64b623045d28"],

Cell[BoxData[
 RowBox[{"Needs", "[", "\"\<WolframInstitute`Puzzles`\>\"", "]"}]], "Input", \
"ExampleInitialization",
 CellLabel->"In[1]:=",
 CellID->1969679695,ExpressionUUID->"6a7a31a2-a7c0-416d-b619-7a630b72736f"],

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->
  "5359dec8-548d-4ee3-8eac-5e91f779c3d4"],
 Cell[BoxData[
  TemplateBox[{1},
   "Spacer1"]],ExpressionUUID->"bf6536f2-5c02-4198-93ff-ef9d3f3e688b"],
 "Basic Examples",
 "\[NonBreakingSpace]\[NonBreakingSpace]",
 Cell["(3)", "ExampleCount",ExpressionUUID->
  "8579c7e7-ed7e-4169-a29e-49aa056e314f"]
}], "ExampleSection", "ExampleSection",
 WholeCellGroupOpener->True,
 CacheGraphics->False,
 CellID->1541570278,ExpressionUUID->"9d9aabef-c490-4fd3-9f8e-52f125d6eeff"],

Cell[TextData[{
 "The BIP39 seed of a mnemonic is PBKDF2-HMAC-SHA512 over 2048 iterations, \
salted with ",
 Cell[BoxData["\<\"mnemonic\"\>"], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "6b3ad7d2-9944-4cf8-a234-1247e1b9adb0"],
 " and the passphrase:"
}], "ExampleText",
 CellTags->
  "TextAnnotation",ExpressionUUID->"7706d5c9-e355-448a-b392-4c030c20a493"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"ByteListToHexString", "[", 
  RowBox[{"PBKDF2Key", "[", 
   RowBox[{"\"\<abandon abandon abandon abandon abandon abandon abandon \
abandon abandon abandon abandon about\>\"", ",", " ", "\"\<mnemonicTREZOR\>\"",
     ",", " ", "2048", ",", " ", "64"}], "]"}], "]"}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"8627e1d6-82fa-470b-9e18-03e866b8c0d0"],

Cell[BoxData["\<\"\
c55257c360c07c72029aebc1b53c05ed0362ada38ead3e3e9efa3708e53495531f09a6987599d1\
8264c1e1c92f2cf141630c7a3c4ab7c81b2f001698e7463b04\"\>"], "Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"66706c68-fb5f-4bd3-8dd4-1e62a4500665"]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 InterpretationBox[Cell[
  "\t", "ExampleDelimiter",ExpressionUUID->
   "c614945b-9e57-47b7-9385-e7e07320c0a4"],
  $Line = 0; Null]], "ExampleDelimiter",ExpressionUUID->"cafbaf23-55a6-4c46-\
8aaf-487d1475648e"],

Cell["\<\
One iteration is a single keyed hash, so the derivation is cheap and weak:\
\>", "ExampleText",ExpressionUUID->"155acae5-49d6-4739-acfd-940bc62950e8"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"ByteListToHexString", "[", 
  RowBox[{"PBKDF2Key", "[", 
   RowBox[{"\"\<password\>\"", ",", " ", "\"\<salt\>\"", ",", " ", "1", ",", 
    " ", "64"}], "]"}], "]"}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"e42b6f34-8156-4d27-a697-ccd02c27d031"],

Cell[BoxData["\<\"\
867f70cf1ade02cff3752599a3a53dc4af34c7a669815ae5d513554e1c8cf252c02d470a285a05\
01bad999bfe943c08f050235d7d68b1da55e63f73b60a57fce\"\>"], "Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"c88a1795-482d-4b4e-ac1f-a951b88f0bde"]
}, Open  ]]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 InterpretationBox[Cell[
  "\t", "ExampleDelimiter",ExpressionUUID->
   "14b256a4-551c-4f35-aba5-9c7e279b4846"],
  $Line = 0; Null]], "ExampleDelimiter",ExpressionUUID->"082d3244-0d5f-4680-\
9091-e7213240781c"],

Cell["\<\
The derived key grows to any requested length, over as many PBKDF2 blocks as \
it takes:\
\>", "ExampleText",ExpressionUUID->"67924fa3-e38b-421e-b44f-a5b2c406de74"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"Length", "[", 
  RowBox[{"PBKDF2Key", "[", 
   RowBox[{"\"\<password\>\"", ",", " ", "\"\<salt\>\"", ",", " ", "100", ",",
     " ", "200"}], "]"}], "]"}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"ef8a662e-4842-44e0-be9a-6b36a2213381"],

Cell[BoxData["200"], "Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"5abc95ea-c910-4715-b312-0e594d179c2d"]
}, 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->
  "32c4368f-69d3-493e-9706-31e4a139fb36"],
 Cell[BoxData[
  TemplateBox[{1},
   "Spacer1"]],ExpressionUUID->"9772dd76-cc59-4894-8f7c-90f72004af91"],
 "Scope",
 "\[NonBreakingSpace]\[NonBreakingSpace]",
 Cell["(3)", "ExampleCount",ExpressionUUID->
  "1246bb60-8f5c-4c95-bb9e-ba718ceb64c4"]
}], "ExampleSection", "ExampleSection",
 WholeCellGroupOpener->True,
 CacheGraphics->False,
 CellID->1293636265,ExpressionUUID->"b31c33cb-4d18-4ab3-b26d-1c4b37a775dc"],

Cell["\<\
The fifth argument selects HMAC-SHA-256 instead, which is the pseudorandom \
function most non-Bitcoin uses of PBKDF2 pick:\
\>", "ExampleText",ExpressionUUID->"4c8c2491-9740-46d9-9b93-bdb368f0aefa"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"ByteListToHexString", "[", 
  RowBox[{"PBKDF2Key", "[", 
   RowBox[{"\"\<password\>\"", ",", " ", "\"\<salt\>\"", ",", " ", "1", ",", 
    " ", "32", ",", " ", "\"\<SHA256\>\""}], "]"}], "]"}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"e0e52b5d-acb2-449c-b52f-a85743238c62"],

Cell[BoxData["\<\"\
120fb6cffcf8b32c43e7225256c4f837a86548c92ccc35480805987cb70be17b\"\>"], \
"Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"91bd39f4-55c5-4b77-9a9d-7331bc8bac65"]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 InterpretationBox[Cell[
  "\t", "ExampleDelimiter",ExpressionUUID->
   "3a7b76d9-790f-4af0-9331-ab8d5e88c62b"],
  $Line = 0; Null]], "ExampleDelimiter",ExpressionUUID->"91759f1f-91a0-4f57-\
acef-d60b65ad8d78"],

Cell["A salt given as raw bytes needs no encoding detour:", "ExampleText",ExpressionUUID->"49f824fb-0b28-4657-b1d1-71406f2a2920"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"ByteListToHexString", "[", 
  RowBox[{"PBKDF2Key", "[", 
   RowBox[{"\"\<password\>\"", ",", " ", 
    RowBox[{"ByteArray", "[", 
     RowBox[{"{", 
      RowBox[{"0", ",", " ", "1", ",", " ", "2", ",", " ", "3"}], "}"}], 
     "]"}], ",", " ", "10", ",", " ", "32", ",", " ", "\"\<SHA256\>\""}], 
   "]"}], "]"}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"493cd179-98a3-437e-bb49-4e017e652ebb"],

Cell[BoxData["\<\"\
dd2b69f4e66e3e777939cb19e766d21beabb2507d08c366e67be55c38298b00d\"\>"], \
"Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"a5a42dad-ff83-465c-ac68-59989b9c033b"]
}, Open  ]]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 InterpretationBox[Cell[
  "\t", "ExampleDelimiter",ExpressionUUID->
   "3f593d16-7c3b-481a-84d4-d84e27d1f1ef"],
  $Line = 0; Null]], "ExampleDelimiter",ExpressionUUID->"a15b04c2-66e8-4bba-\
8023-9b774fccfc27"],

Cell[TextData[{
 "Electrum version 2 differs from BIP39 only in the salt prefix, ",
 Cell[BoxData["\<\"electrum\"\>"], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "132864c9-4d3a-4f3f-b0f9-5e69f2661d03"],
 " in place of ",
 Cell[BoxData["\<\"mnemonic\"\>"], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "907c7c1b-95b6-4fd8-9b27-0c56b0ba6fb9"],
 ":"
}], "ExampleText",ExpressionUUID->"092217ba-1c23-4876-a5b3-ff50683fcfac"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"ByteListToHexString", "[", 
  RowBox[{"PBKDF2Key", "[", 
   RowBox[{"\"\<wild father tree among universe such mobile favorite target \
dynamic credit identify\>\"", ",", " ", "\"\<electrum\>\"", ",", " ", "2048", 
    ",", " ", "64"}], "]"}], "]"}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"0ddf6b65-9b83-4e5b-9b4d-7b68c32f6d19"],

Cell[BoxData["\<\"\
aac2a6302e48577ab4b46f23dbae0774e2e62c796f797d0a1b5faeb528301e3064342dafb79069\
e7c4c6b8c38ae11d7a973bec0d4f70626f8cc5184a8d0b0756\"\>"], "Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"ae07edef-e6ee-4884-ab70-377bef580792"]
}, 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->
  "4fc51f56-a56c-404e-a1b1-60cd85d33eb9"],
 Cell[BoxData[
  TemplateBox[{1},
   "Spacer1"]],ExpressionUUID->"4ed8864d-ea8d-4a06-be4f-e24d636c5c62"],
 "Properties & Relations",
 "\[NonBreakingSpace]\[NonBreakingSpace]",
 Cell["(3)", "ExampleCount",ExpressionUUID->
  "ef74f50f-a520-45b7-ae2f-9ae7a6cef753"]
}], "ExampleSection", "ExampleSection",
 WholeCellGroupOpener->True,
 CacheGraphics->False,
 CellID->2123667759,ExpressionUUID->"34f9c86e-1c61-431a-ae86-95cd9389ef46"],

Cell["\<\
The first block of a long derived key is the whole of a short one, because \
the blocks are independent:\
\>", "ExampleText",ExpressionUUID->"69b8ea72-b1a3-445c-8342-620fda4e5eed"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{
  RowBox[{"Take", "[", 
   RowBox[{
    RowBox[{"PBKDF2Key", "[", 
     RowBox[{"\"\<password\>\"", ",", " ", "\"\<salt\>\"", ",", " ", "50", ",",
       " ", "128"}], "]"}], ",", " ", "64"}], "]"}], " ", "===", " ", 
  RowBox[{"PBKDF2Key", "[", 
   RowBox[{"\"\<password\>\"", ",", " ", "\"\<salt\>\"", ",", " ", "50", ",", 
    " ", "64"}], "]"}]}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"d31c787e-b1c9-41b3-b0c3-69a25eaf1139"],

Cell[BoxData["True"], "Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"8a67e8ff-fc8a-4c48-ac67-5e21825f3d98"]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 InterpretationBox[Cell[
  "\t", "ExampleDelimiter",ExpressionUUID->
   "98c3ccd2-5e57-422b-9c6b-949a676d1b72"],
  $Line = 0; Null]], "ExampleDelimiter",ExpressionUUID->"1064cceb-32dc-4f76-\
8e5c-baaf575e9ed7"],

Cell["\<\
A password supplied as bytes takes the portable definition and a password \
supplied as a string may take the kernel's OpenSSL binding; they agree:\
\>", "ExampleText",ExpressionUUID->"2c79adbb-98ef-4e3d-b57b-4960756f8e8f"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{
  RowBox[{"PBKDF2Key", "[", 
   RowBox[{
    RowBox[{"StringToByteArray", "[", 
     RowBox[{"\"\<password\>\"", ",", " ", "\"\<UTF8\>\""}], "]"}], ",", 
    " ", "\"\<salt\>\"", ",", " ", "2048", ",", " ", "64"}], "]"}], " ", "===",
   " ", 
  RowBox[{"PBKDF2Key", "[", 
   RowBox[{"\"\<password\>\"", ",", " ", "\"\<salt\>\"", ",", " ", "2048", ",",
     " ", "64"}], "]"}]}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"bf54755b-8681-41cb-9a99-34c884d03798"],

Cell[BoxData["True"], "Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"b3e2e2e0-049a-4e1a-a8ce-f40eebb98996"]
}, Open  ]]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 InterpretationBox[Cell[
  "\t", "ExampleDelimiter",ExpressionUUID->
   "cf65f99f-3d3f-4bf3-b08b-dd8646a66f8d"],
  $Line = 0; Null]], "ExampleDelimiter",ExpressionUUID->"8c20ab02-d36e-41ed-\
a1ac-66303e069b0d"],

Cell[TextData[{
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData["BIP39Seed"]], "paclet:WolframInstitute/Puzzles/ref/BIP39Seed", 
    "WolframInstitute/Puzzles Package Symbol"},
   "PackageLink",
   BaseStyle->"InlineFormula"]], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "916fa29a-a2c7-4369-8dc9-523c3b5a0ac0"],
 " is this function with the BIP39 parameters filled in:"
}], "ExampleText",ExpressionUUID->"a8edab1d-2712-4f91-99c6-f217fb8c6827"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{
  RowBox[{"BIP39Seed", "[", 
   RowBox[{"\"\<abandon abandon abandon abandon abandon abandon abandon \
abandon abandon abandon abandon about\>\"", ",", " ", "\"\<TREZOR\>\""}], 
   "]"}], " ", "===", " ", 
  RowBox[{"PBKDF2Key", "[", 
   RowBox[{"\"\<abandon abandon abandon abandon abandon abandon abandon \
abandon abandon abandon abandon about\>\"", ",", " ", "\"\<mnemonicTREZOR\>\"",
     ",", " ", "2048", ",", " ", "64"}], "]"}]}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"f26aa4f4-3cb7-4a37-926f-a69b6d4ad408"],

Cell[BoxData["True"], "Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"d82a11d6-6837-44f1-9964-3bf01bbab40d"]
}, 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->
  "5df2fc54-46f1-4c1f-a370-a750aa005d09"],
 Cell[BoxData[
  TemplateBox[{1},
   "Spacer1"]],ExpressionUUID->"052f0ee8-4497-497a-a4cb-80c77875010b"],
 "Possible Issues",
 "\[NonBreakingSpace]\[NonBreakingSpace]",
 Cell["(2)", "ExampleCount",ExpressionUUID->
  "7b5cebbb-982a-41d4-96aa-988b9eff0e97"]
}], "ExampleSection", "ExampleSection",
 WholeCellGroupOpener->True,
 CacheGraphics->False,
 CellID->1305812373,ExpressionUUID->"a5417bd4-3f6e-43c4-adbc-2845070172c0"],

Cell["\<\
Zero iterations is not a derivation and matches no definition:\
\>", "ExampleText",ExpressionUUID->"0bc829f5-cb9f-4141-8562-9ffb1755c466"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"PBKDF2Key", "[", 
  RowBox[{"\"\<password\>\"", ",", " ", "\"\<salt\>\"", ",", " ", "0", ",", 
   " ", "64"}], "]"}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"65222988-36d2-494a-96f0-1a99f7dd9da5"],

Cell[BoxData[
 RowBox[{"PBKDF2Key", "[", 
  RowBox[{"\<\"password\"\>", ",", "\<\"salt\"\>", ",", "0", ",", "64"}], 
  "]"}]], "Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"fe8fd156-d886-42f2-8b58-5c619c60787a"]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 InterpretationBox[Cell[
  "\t", "ExampleDelimiter",ExpressionUUID->
   "4f4e3369-c446-49db-baae-76c477acbbff"],
  $Line = 0; Null]], "ExampleDelimiter",ExpressionUUID->"7051dbdc-12b4-4b77-\
93ea-2e7565bbe215"],

Cell["\<\
A large iteration count over a hash other than SHA-512, or at a size other \
than 64 bytes, cannot use the kernel's fast binding and costs about a \
millisecond per iteration:\
\>", "ExampleText",ExpressionUUID->"cecf151b-38e5-4715-a810-c0d7aaab5ef2"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{
  RowBox[{"First", "[", 
   RowBox[{"AbsoluteTiming", "[", 
    RowBox[{"PBKDF2Key", "[", 
     RowBox[{"\"\<password\>\"", ",", " ", "\"\<salt\>\"", ",", " ", "200", ",",
       " ", "32", ",", " ", "\"\<SHA256\>\""}], "]"}], "]"}], "]"}], " ", "<",
   " ", "2"}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"27bf060f-8dbe-4a24-a5b4-bdc6ae72ba7e"],

Cell[BoxData["True"], "Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"0c677f8c-2ccb-4818-897d-30ea97fe8e00"]
}, Open  ]]
}, Open  ]]
}, Closed]]
}, Open  ]],

Cell[BoxData[GridBox[{
   {
    DynamicBox[FEPrivate`ImportImage[
      FrontEnd`FileName[{"Documentation", "FooterIcons"}, 
       "RelatedFunction.png"]],
     ImageSizeCache->{50., {26.47265625, 33.52734375}}], GridBox[{
      {
       StyleBox[
        RowBox[{"See", " ", "Also"}], "SeeAlsoSection"]},
      {Cell[TextData[{
        Cell[BoxData[
         TemplateBox[{
           Cell[
            TextData["HMACHash"]], 
           "paclet:WolframInstitute/Puzzles/ref/HMACHash", 
           "WolframInstitute/Puzzles Package Symbol"},
          "PackageLink",
          BaseStyle->"InlineFormula"]], "InlineFormula",
         FontFamily->"Source Sans Pro",ExpressionUUID->
         "83e822e4-240f-4c5b-88a7-184cc3022232"],
        "\[NonBreakingSpace]",
        StyleBox[
        "\[MediumSpace]\[FilledVerySmallSquare]\[MediumSpace]", 
         "InlineSeparator"],
        " ",
        Cell[BoxData[
         TemplateBox[{
           Cell[
            TextData["BIP39Seed"]], 
           "paclet:WolframInstitute/Puzzles/ref/BIP39Seed", 
           "WolframInstitute/Puzzles Package Symbol"},
          "PackageLink",
          BaseStyle->"InlineFormula"]], "InlineFormula",
         FontFamily->"Source Sans Pro",ExpressionUUID->
         "13fd55da-56a9-4c4d-860c-f0007a0716b7"],
        "\[NonBreakingSpace]",
        StyleBox[
        "\[MediumSpace]\[FilledVerySmallSquare]\[MediumSpace]", 
         "InlineSeparator"],
        " ",
        Cell[BoxData[
         TemplateBox[{
           Cell[
            TextData["ElectrumV2Seed"]], 
           "paclet:WolframInstitute/Puzzles/ref/ElectrumV2Seed", 
           "WolframInstitute/Puzzles Package Symbol"},
          "PackageLink",
          BaseStyle->"InlineFormula"]], "InlineFormula",
         FontFamily->"Source Sans Pro",ExpressionUUID->
         "f74be681-5a0b-45b4-b00b-ee54f5ff50e1"],
        "\[NonBreakingSpace]",
        StyleBox[
        "\[MediumSpace]\[FilledVerySmallSquare]\[MediumSpace]", 
         "InlineSeparator"],
        " ",
        Cell[BoxData[
         TemplateBox[{
           Cell[
            TextData["GenerateDerivedKey"]], "paclet:ref/GenerateDerivedKey"},
          
          "RefLink",
          BaseStyle->"InlineFormula"]], "InlineFormula",
         FontFamily->"Source Sans Pro",ExpressionUUID->
         "b72b4eb3-f6ac-4e87-8dfc-09aa269b0ee8"],
        "\[NonBreakingSpace]",
        StyleBox[
        "\[MediumSpace]\[FilledVerySmallSquare]\[MediumSpace]", 
         "InlineSeparator"],
        " ",
        Cell[BoxData[
         TemplateBox[{
           Cell[
            TextData["ByteArray"]], "paclet:ref/ByteArray"},
          "RefLink",
          BaseStyle->"InlineFormula"]], "InlineFormula",
         FontFamily->"Source Sans Pro",ExpressionUUID->
         "1b2db7de-4cea-4812-bd63-faeb0fe20cf6"]
       }], "SeeAlso",ExpressionUUID->"ed626d15-8817-4f51-941c-2522331e557a"]}
     }]}
  }]], "SeeAlsoSection",ExpressionUUID->"5b1f7d1d-5043-4add-8d64-\
b908bc414c08"],

Cell[BoxData[GridBox[{
   {
    DynamicBox[FEPrivate`ImportImage[
      FrontEnd`FileName[{"Documentation", "FooterIcons"}, "RelatedGuide.png"]],
     ImageSizeCache->{50., {26.47265625, 33.52734375}}], GridBox[{
      {
       StyleBox[
        RowBox[{"Related", " ", "Guides"}], "MoreAboutSection"]},
      {
       RowBox[{"\[FilledVerySmallSquare]", Cell[BoxData[
         TemplateBox[{
           Cell[
            TextData["Seeds"]], "paclet:WolframInstitute/Puzzles/guide/Seeds"},
          "RefLinkPlain",
          BaseStyle->{"MoreAbout"}]], "MoreAbout",ExpressionUUID->
         "42f4dc58-1352-4b9d-a3a8-27b326356a8b"]}]}
     }]}
  }]], "MoreAboutSection",ExpressionUUID->"c312ac30-31ec-4d68-be7f-\
9e8eeba11064"],

Cell[" ", "FooterCell",ExpressionUUID->"4593ba0c-8d45-4099-8bf3-fe461db46458"]
},
Saveable->False,
ScreenStyleEnvironment->"Working",
WindowSize->{900, 830},
WindowMargins->{{0, Automatic}, {Automatic, 0}},
WindowTitle->"PBKDF2Key",
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, 49.418755}", 
    "history" -> {"XX", "", "", ""}, "context" -> "WolframInstitute`Puzzles`",
     "keywords" -> {}, "specialkeywords" -> {}, 
    "tutorialcollectionlinks" -> {}, "index" -> True, "label" -> 
    "Wolfram Institute/ Puzzles Symbol", "language" -> "en", "paclet" -> 
    "WolframInstitute/Puzzles", "status" -> "None", "summary" -> 
    "PackageLink[PBKDF2Key,paclet : WolframInstitute/Puzzles/ref/PBKDF2Key, \
WolframInstitute/ Puzzles Package Symbol][password, salt, iterations, size] \
gives the size-byte PBKDF2-HMAC-SHA512 derived key of password and salt after \
iterations iterations, as a ByteArray. PackageLink[PBKDF2Key,paclet : \
WolframInstitute/Puzzles/ref/PBKDF2Key, WolframInstitute/ Puzzles Package \
Symbol][password, salt, iterations, size, type] builds the derivation on HMAC \
over type, one of SHA256 or SHA512.", "synonyms" -> {}, "tabletags" -> {}, 
    "title" -> "PBKDF2Key", "titlemodifier" -> "", "metadescription" -> "", 
    "windowtitle" -> "PBKDF2Key", "type" -> "Symbol", "uri" -> 
    "WolframInstitute/Puzzles/ref/PBKDF2Key", "WorkflowDockedCell" -> ""}, 
  "SearchTextTranslated" -> ""},
CellContext->CellGroup,
FrontEndVersion->"15.0 for Mac OS X ARM (64-bit) (May 19, 2026)",
StyleDefinitions->FrontEnd`FileName[{"Wolfram"}, "Reference.nb"],
ExpressionUUID->"adda9a59-0466-47d4-8207-5a4f47fc4a5f"
]
(* End of Notebook Content *)

(* Internal cache information *)
(*CellTagsOutline
CellTagsIndex->{
 "TextAnnotation"->{
  Cell[19734, 563, 408, 10, 70, "ExampleText",ExpressionUUID->"7706d5c9-e355-448a-b392-4c030c20a493",
   CellTags->"TextAnnotation"]}
 }
*)
(*CellTagsIndex
CellTagsIndex->{
 {"TextAnnotation", 41204, 1155}
 }
*)
(*NotebookFileOutline
Notebook[{
Cell[577, 21, 6102, 147, 70, "AnchorBarGrid",ExpressionUUID->"0fe3b507-ae84-4b8c-bc69-21ba2e7f5b88",
 CellID->1],
Cell[6682, 170, 107, 0, 70, "ContextNameCell",ExpressionUUID->"3ad849d1-d132-48a6-b8c9-e8bb9f6b262b"],
Cell[CellGroupData[{
Cell[6814, 174, 552, 14, 70, "ObjectNameGrid",ExpressionUUID->"62c9e614-fe8f-4b95-b920-10c3f7390fec"],
Cell[7369, 190, 2645, 73, 70, "Usage",ExpressionUUID->"af3c1e67-ebb9-424e-8c85-ac3beb1b237c"]
}, Open  ]],
Cell[CellGroupData[{
Cell[10051, 268, 1443, 34, 70, "NotesSection",ExpressionUUID->"5e760b56-9f65-49c1-9065-ab566bc449b8",
 CellGroupingRules->{"SectionGrouping", 50},
 CellID->725500026],
Cell[11497, 304, 2001, 74, 70, "Notes",ExpressionUUID->"f3f0dec0-46fe-4641-8bfe-05d0a1e5c816"],
Cell[13501, 380, 527, 17, 70, "Notes",ExpressionUUID->"eb89db29-1d29-4824-8bee-72648ba1a846"],
Cell[14031, 399, 716, 23, 70, "Notes",ExpressionUUID->"a0c12511-3359-43b5-90df-00e782960ffc"],
Cell[14750, 424, 662, 18, 70, "Notes",ExpressionUUID->"d00ce741-0799-4f03-ad6b-24eb3f0344b1"],
Cell[15415, 444, 413, 11, 70, "Notes",ExpressionUUID->"4b000061-0e29-4f4b-b142-2c5be20fc161"],
Cell[15831, 457, 409, 10, 70, "Notes",ExpressionUUID->"55cffa05-07f4-423b-8ec7-d4cbaea3dad4"],
Cell[16243, 469, 488, 7, 70, "Notes",ExpressionUUID->"f3a1fb09-2574-4887-869b-198ae3f5c7af"]
}, Closed]],
Cell[16746, 479, 80, 0, 70, "PageDelimiter",ExpressionUUID->"4acaf8cb-d00f-476d-abf8-55e3fd60e230"],
Cell[CellGroupData[{
Cell[16851, 483, 1400, 37, 70, "PrimaryExamplesSection",ExpressionUUID->"d3861254-aca9-4efa-b626-64b623045d28",
 CellID->66789316],
Cell[18254, 522, 216, 4, 70, "Input",ExpressionUUID->"6a7a31a2-a7c0-416d-b619-7a630b72736f",
 CellID->1969679695],
Cell[CellGroupData[{
Cell[18495, 530, 1236, 31, 70, "ExampleSection",ExpressionUUID->"9d9aabef-c490-4fd3-9f8e-52f125d6eeff",
 CellID->1541570278],
Cell[19734, 563, 408, 10, 70, "ExampleText",ExpressionUUID->"7706d5c9-e355-448a-b392-4c030c20a493",
 CellTags->"TextAnnotation"],
Cell[CellGroupData[{
Cell[20167, 577, 426, 7, 70, "Input",ExpressionUUID->"8627e1d6-82fa-470b-9e18-03e866b8c0d0"],
Cell[20596, 586, 246, 3, 70, "Output",ExpressionUUID->"66706c68-fb5f-4bd3-8dd4-1e62a4500665"]
}, Open  ]],
Cell[CellGroupData[{
Cell[20879, 594, 224, 5, 70, "ExampleDelimiter",ExpressionUUID->"cafbaf23-55a6-4c46-8aaf-487d1475648e"],
Cell[21106, 601, 160, 2, 70, "ExampleText",ExpressionUUID->"155acae5-49d6-4739-acfd-940bc62950e8"],
Cell[CellGroupData[{
Cell[21291, 607, 326, 6, 70, "Input",ExpressionUUID->"e42b6f34-8156-4d27-a697-ccd02c27d031"],
Cell[21620, 615, 246, 3, 70, "Output",ExpressionUUID->"c88a1795-482d-4b4e-ac1f-a951b88f0bde"]
}, Open  ]]
}, Open  ]],
Cell[CellGroupData[{
Cell[21915, 624, 224, 5, 70, "ExampleDelimiter",ExpressionUUID->"082d3244-0d5f-4680-9091-e7213240781c"],
Cell[22142, 631, 174, 3, 70, "ExampleText",ExpressionUUID->"67924fa3-e38b-421e-b44f-a5b2c406de74"],
Cell[CellGroupData[{
Cell[22341, 638, 316, 6, 70, "Input",ExpressionUUID->"ef8a662e-4842-44e0-be9a-6b36a2213381"],
Cell[22660, 646, 109, 1, 70, "Output",ExpressionUUID->"5abc95ea-c910-4715-b312-0e594d179c2d"]
}, Open  ]]
}, Open  ]]
}, Open  ]],
Cell[CellGroupData[{
Cell[22830, 654, 1227, 31, 70, "ExampleSection",ExpressionUUID->"b31c33cb-4d18-4ab3-b26d-1c4b37a775dc",
 CellID->1293636265],
Cell[24060, 687, 209, 3, 70, "ExampleText",ExpressionUUID->"4c8c2491-9740-46d9-9b93-bdb368f0aefa"],
Cell[CellGroupData[{
Cell[24294, 694, 354, 6, 70, "Input",ExpressionUUID->"e0e52b5d-acb2-449c-b52f-a85743238c62"],
Cell[24651, 702, 182, 3, 70, "Output",ExpressionUUID->"91bd39f4-55c5-4b77-9a9d-7331bc8bac65"]
}, Open  ]],
Cell[CellGroupData[{
Cell[24870, 710, 224, 5, 70, "ExampleDelimiter",ExpressionUUID->"91759f1f-91a0-4f57-acef-d60b65ad8d78"],
Cell[25097, 717, 129, 0, 70, "ExampleText",ExpressionUUID->"49f824fb-0b28-4657-b1d1-71406f2a2920"],
Cell[CellGroupData[{
Cell[25251, 721, 475, 10, 70, "Input",ExpressionUUID->"493cd179-98a3-437e-bb49-4e017e652ebb"],
Cell[25729, 733, 182, 3, 70, "Output",ExpressionUUID->"a5a42dad-ff83-465c-ac68-59989b9c033b"]
}, Open  ]]
}, Open  ]],
Cell[CellGroupData[{
Cell[25960, 742, 224, 5, 70, "ExampleDelimiter",ExpressionUUID->"a15b04c2-66e8-4bba-8023-9b774fccfc27"],
Cell[26187, 749, 522, 12, 70, "ExampleText",ExpressionUUID->"092217ba-1c23-4876-a5b3-ff50683fcfac"],
Cell[CellGroupData[{
Cell[26734, 765, 410, 7, 70, "Input",ExpressionUUID->"0ddf6b65-9b83-4e5b-9b4d-7b68c32f6d19"],
Cell[27147, 774, 246, 3, 70, "Output",ExpressionUUID->"ae07edef-e6ee-4884-ab70-377bef580792"]
}, Open  ]]
}, Open  ]]
}, Closed]],
Cell[CellGroupData[{
Cell[27454, 784, 1244, 31, 70, "ExampleSection",ExpressionUUID->"34f9c86e-1c61-431a-ae86-95cd9389ef46",
 CellID->2123667759],
Cell[28701, 817, 190, 3, 70, "ExampleText",ExpressionUUID->"69b8ea72-b1a3-445c-8342-620fda4e5eed"],
Cell[CellGroupData[{
Cell[28916, 824, 512, 11, 70, "Input",ExpressionUUID->"d31c787e-b1c9-41b3-b0c3-69a25eaf1139"],
Cell[29431, 837, 110, 1, 70, "Output",ExpressionUUID->"8a67e8ff-fc8a-4c48-ac67-5e21825f3d98"]
}, Open  ]],
Cell[CellGroupData[{
Cell[29578, 843, 224, 5, 70, "ExampleDelimiter",ExpressionUUID->"1064cceb-32dc-4f76-8e5c-baaf575e9ed7"],
Cell[29805, 850, 233, 3, 70, "ExampleText",ExpressionUUID->"2c79adbb-98ef-4e3d-b57b-4960756f8e8f"],
Cell[CellGroupData[{
Cell[30063, 857, 539, 12, 70, "Input",ExpressionUUID->"bf54755b-8681-41cb-9a99-34c884d03798"],
Cell[30605, 871, 110, 1, 70, "Output",ExpressionUUID->"b3e2e2e0-049a-4e1a-a8ce-f40eebb98996"]
}, Open  ]]
}, Open  ]],
Cell[CellGroupData[{
Cell[30764, 878, 224, 5, 70, "ExampleDelimiter",ExpressionUUID->"8c20ab02-d36e-41ed-a1ac-66303e069b0d"],
Cell[30991, 885, 502, 12, 70, "ExampleText",ExpressionUUID->"a8edab1d-2712-4f91-99c6-f217fb8c6827"],
Cell[CellGroupData[{
Cell[31518, 901, 599, 11, 70, "Input",ExpressionUUID->"f26aa4f4-3cb7-4a37-926f-a69b6d4ad408"],
Cell[32120, 914, 110, 1, 70, "Output",ExpressionUUID->"d82a11d6-6837-44f1-9964-3bf01bbab40d"]
}, Open  ]]
}, Open  ]]
}, Closed]],
Cell[CellGroupData[{
Cell[32291, 922, 1237, 31, 70, "ExampleSection",ExpressionUUID->"a5417bd4-3f6e-43c4-adbc-2845070172c0",
 CellID->1305812373],
Cell[33531, 955, 148, 2, 70, "ExampleText",ExpressionUUID->"0bc829f5-cb9f-4141-8562-9ffb1755c466"],
Cell[CellGroupData[{
Cell[33704, 961, 278, 5, 70, "Input",ExpressionUUID->"65222988-36d2-494a-96f0-1a99f7dd9da5"],
Cell[33985, 968, 215, 4, 70, "Output",ExpressionUUID->"fe8fd156-d886-42f2-8b58-5c619c60787a"]
}, Open  ]],
Cell[CellGroupData[{
Cell[34237, 977, 224, 5, 70, "ExampleDelimiter",ExpressionUUID->"7051dbdc-12b4-4b77-93ea-2e7565bbe215"],
Cell[34464, 984, 261, 4, 70, "ExampleText",ExpressionUUID->"cecf151b-38e5-4715-a810-c0d7aaab5ef2"],
Cell[CellGroupData[{
Cell[34750, 992, 426, 9, 70, "Input",ExpressionUUID->"27bf060f-8dbe-4a24-a5b4-bdc6ae72ba7e"],
Cell[35179, 1003, 110, 1, 70, "Output",ExpressionUUID->"0c677f8c-2ccb-4818-897d-30ea97fe8e00"]
}, Open  ]]
}, Open  ]]
}, Closed]]
}, Open  ]],
Cell[35340, 1010, 2981, 80, 70, "SeeAlsoSection",ExpressionUUID->"5b1f7d1d-5043-4add-8d64-b908bc414c08"],
Cell[38324, 1092, 726, 18, 70, "MoreAboutSection",ExpressionUUID->"c312ac30-31ec-4d68-be7f-9e8eeba11064"],
Cell[39053, 1112, 78, 0, 70, "FooterCell",ExpressionUUID->"4593ba0c-8d45-4099-8bf3-fe461db46458"]
}
]
*)

(* End of internal cache information *)

