@solana/webcrypto-ed25519-polyfill 5.1.0-canary-20251202173352 → 5.1.0-canary-20251203213248
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.browser.cjs +10 -10
- package/dist/index.browser.cjs.map +1 -1
- package/dist/index.browser.mjs +10 -10
- package/dist/index.browser.mjs.map +1 -1
- package/dist/index.native.mjs +10 -10
- package/dist/index.native.mjs.map +1 -1
- package/dist/index.node.cjs +10 -10
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.mjs +10 -10
- package/dist/index.node.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/secrets.ts","../src/install.ts"],"names":["_"],"mappings":";;;AAiBA,IAAM,qBAAA,uBAA4B,GAAc,CAAA;AAAA,EAC5C,SAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA;AACJ,CAAC,CAAA;AAED,IAAM,oBAAA;AAAA;AAAA,EAEF;AAAA;AAAA;AAAA;AAAA,IAII,EAAA;AAAA;AAAA,IACA,EAAA;AAAA;AAAA,IAEI,CAAA;AAAA;AAAA,IACA,CAAA;AAAA;AAAA,IACI,CAAA;AAAA;AAAA,IAEJ,EAAA;AAAA;AAAA,IACA,CAAA;AAAA;AAAA,IACI,CAAA;AAAA;AAAA,IACA,CAAA;AAAA;AAAA;AAAA,IAEQ,EAAA;AAAA;AAAA,IACA,GAAA;AAAA;AAAA;AAAA,IAEA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAKhB,CAAA;AAAA;AAAA,IACA,EAAA;AAAA;AAAA;AAAA,IAGI,CAAA;AAAA;AAAA,IACA;AAAA;AAAA;AACR,CAAA;AAEJ,SAAS,yBAAyB,IAAgC,EAAA;AAC9D,EAAO,OAAA,IAAA,YAAgB,UAAa,GAAA,IAAA,GAAO,IAAI,UAAA,CAAW,WAAY,CAAA,MAAA,CAAO,IAAI,CAAA,GAAI,IAAK,CAAA,MAAA,GAAS,IAAI,CAAA;AAC3G;AAEA,IAAI,iDAAA;AAGJ,IAAI,mBAAA;AAEJ,SAAS,sBAAA,CACL,KACA,EAAA,WAAA,EACA,SACa,EAAA;AACb,EAAM,MAAA,OAAA,GAAU,yCAA0C,CAAA,WAAA,EAAa,SAAS,CAAA;AAChF,EAAM,MAAA,KAAA,GAAS,iDAAsD,qBAAA,IAAI,OAAQ,EAAA;AACjF,EAAM,KAAA,CAAA,GAAA,CAAI,OAAQ,CAAA,UAAA,EAAY,KAAK,CAAA;AACnC,EAAM,KAAA,CAAA,GAAA,CAAI,OAAQ,CAAA,SAAA,EAAW,KAAK,CAAA;AAClC,EAAO,OAAA,OAAA;AACX;AAEA,SAAS,yCAAA,CACL,aACA,SACa,EAAA;AACb,EAAI,IAAA,SAAA,CAAU,WAAW,CAAG,EAAA;AACxB,IAAM,MAAA,IAAI,YAAa,CAAA,6CAAA,EAA+C,aAAa,CAAA;AAAA;AAEvF,EAAA,IAAI,UAAU,IAAK,CAAA,CAAA,KAAA,KAAS,sBAAsB,GAAI,CAAA,KAAK,CAAC,CAAG,EAAA;AAC3D,IAAM,MAAA,IAAI,YAAa,CAAA,2CAAA,EAA6C,aAAa,CAAA;AAAA;AAErF,EAAA,MAAM,IAAO,GAAA;AAAA,IACT,CAAC,MAAO,CAAA,WAAW,GAAG,WAAA;AAAA,IACtB,WAAW,MAAO,CAAA,MAAA,CAAO,EAAE,IAAA,EAAM,WAAW;AAAA,GAChD;AACA,EAAA,MAAM,UAAa,GAAA;AAAA,IACf,GAAG,IAAA;AAAA,IACH,WAAA;AAAA,IACA,IAAM,EAAA,SAAA;AAAA,IACN,MAAA,EAAQ,OAAO,MAAO,CAAA,SAAA,CAAU,OAAO,CAAS,KAAA,KAAA,KAAA,KAAU,MAAM,CAAC;AAAA,GACrE;AACA,EAAA,MAAM,SAAY,GAAA;AAAA,IACd,GAAG,IAAA;AAAA,IACH,WAAa,EAAA,IAAA;AAAA,IACb,IAAM,EAAA,QAAA;AAAA,IACN,MAAA,EAAQ,OAAO,MAAO,CAAA,SAAA,CAAU,OAAO,CAAS,KAAA,KAAA,KAAA,KAAU,QAAQ,CAAC;AAAA,GACvE;AACA,EAAA,OAAO,OAAO,MAAO,CAAA;AAAA,IACjB,UAAA,EAAY,MAAO,CAAA,MAAA,CAAO,UAAU,CAAA;AAAA,IACpC,SAAA,EAAW,MAAO,CAAA,MAAA,CAAO,SAAS;AAAA,GACrC,CAAA;AACL;AAEA,SAAS,8CAA8C,GAA4B,EAAA;AAC/E,EAAM,MAAA,cAAA,GAAiB,iDAAmD,EAAA,GAAA,CAAI,GAAG,CAAA;AACjF,EAAA,IAAI,mBAAmB,MAAW,EAAA;AAC9B,IAAM,MAAA,IAAI,MAAM,qEAAqE,CAAA;AAAA;AAEzF,EAAO,OAAA,cAAA;AACX;AAEA,eAAe,kBAAkB,GAAqC,EAAA;AAElE,EAAM,MAAA,cAAA,GAAkB,mBAAwB,qBAAA,IAAI,OAAQ,EAAA;AAC5D,EAAM,MAAA,eAAA,GAAkB,cAAe,CAAA,GAAA,CAAI,GAAG,CAAA;AAC9C,EAAA,IAAI,iBAAwB,OAAA,eAAA;AAG5B,EAAA,MAAM,cAAiB,GAAA,MAAM,iBAAkB,CAAA,6CAAA,CAA8C,GAAG,CAAC,CAAA;AAGjG,EAAe,cAAA,CAAA,GAAA,CAAI,KAAK,cAAc,CAAA;AACtC,EAAO,OAAA,cAAA;AACX;AAEA,SAAS,gBAAgB,KAA2B,EAAA;AAChD,EAAO,OAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAK,KAAO,EAAA,CAAA,CAAA,KAAK,OAAO,YAAa,CAAA,CAAC,CAAC,CAAA,CAAE,IAAK,CAAA,EAAE,CAAC,CAC9D,CAAA,OAAA,CAAQ,KAAO,EAAA,GAAG,CAClB,CAAA,OAAA,CAAQ,OAAO,GAAG,CAAA,CAClB,OAAQ,CAAA,KAAA,EAAO,EAAE,CAAA;AAC1B;AAEA,SAAS,gBAAgB,KAA2B,EAAA;AAChD,EAAM,MAAA,CAAA,GAAI,MAAM,MAAS,GAAA,CAAA;AACzB,EAAA,MAAM,cAAc,KACf,CAAA,OAAA,CAAQ,MAAM,GAAG,CAAA,CACjB,QAAQ,IAAM,EAAA,GAAG,CACjB,CAAA,MAAA,CAAO,MAAM,MAAU,IAAA,CAAA,KAAM,IAAI,CAAI,GAAA,CAAA,GAAI,IAAI,GAAG,CAAA;AACrD,EAAO,OAAA,UAAA,CAAW,KAAK,IAAK,CAAA,WAAW,GAAG,CAAK,CAAA,KAAA,CAAA,CAAE,UAAW,CAAA,CAAC,CAAC,CAAA;AAClE;AAIA,eAAsB,iBAAA,CAAkB,QAAmB,GAAmD,EAAA;AAC1G,EAAI,IAAA,GAAA,CAAI,gBAAgB,KAAO,EAAA;AAC3B,IAAM,MAAA,IAAI,YAAa,CAAA,wBAAA,EAA0B,wBAAwB,CAAA;AAAA;AAE7E,EAAA,QAAQ,MAAQ;AAAA,IACZ,KAAK,KAAO,EAAA;AACR,MAAI,IAAA,GAAA,CAAI,SAAS,QAAU,EAAA;AACvB,QAAA,MAAM,IAAI,YAAa,CAAA,CAAA,+BAAA,EAAkC,GAAI,CAAA,IAAI,QAAQ,oBAAoB,CAAA;AAAA;AAEjG,MAAM,MAAA,cAAA,GAAiB,MAAM,iBAAA,CAAkB,GAAG,CAAA;AAClD,MAAA,OAAO,cAAe,CAAA,MAAA;AAAA;AAC1B,IACA,KAAK,OAAS,EAAA;AACV,MAAI,IAAA,GAAA,CAAI,SAAS,SAAW,EAAA;AACxB,QAAA,MAAM,IAAI,YAAa,CAAA,CAAA,iCAAA,EAAoC,GAAI,CAAA,IAAI,QAAQ,oBAAoB,CAAA;AAAA;AAEnG,MAAM,MAAA,cAAA,GAAiB,8CAA8C,GAAG,CAAA;AACxE,MAAA,MAAM,SAAS,IAAI,UAAA,CAAW,oBAAqB,CAAA,MAAA,GAAS,eAAe,MAAM,CAAA;AACjF,MAAO,MAAA,CAAA,GAAA,CAAI,sBAAsB,CAAC,CAAA;AAClC,MAAO,MAAA,CAAA,GAAA,CAAI,cAAgB,EAAA,oBAAA,CAAqB,MAAM,CAAA;AACtD,MAAA,OAAO,MAAO,CAAA,MAAA;AAAA;AAClB,IACA,KAAK,KAAO,EAAA;AACR,MAAM,MAAA,cAAA,GAAiB,MAAM,iBAAA,CAAkB,GAAG,CAAA;AAClD,MAAA,MAAM,IAAO,GAAA;AAAA,QACT,GAAiB,EAAA,SAAA;AAAA,QACjB,KAAuB,GAAI,CAAA,WAAA;AAAA,QAC3B,SAA8B,GAAI,CAAA,MAAA;AAAA,QAClC,GAAoB,EAAA,KAAA;AAAA,QACpB,CAAA,EAAsD,gBAAgB,cAAc;AAAA,OACxF;AACA,MAAI,IAAA,GAAA,CAAI,SAAS,SAAW,EAAA;AACxB,QAAM,MAAA,cAAA,GAAiB,8CAA8C,GAAG,CAAA;AACxE,QAAA,OAAO,OAAO,MAAO,CAAA;AAAA,UACjB,GAAG,IAAA;AAAA,UACH,CAAA,EAA0C,gBAAgB,cAAc;AAAA,SAC3E,CAAA;AAAA;AAEL,MAAA,OAAO,MAAO,CAAA,MAAA,CAAO,EAAE,GAAG,MAAM,CAAA;AAAA;AACpC,IACA;AACI,MAAA,MAAM,IAAI,KAAA,CAAM,CAA6C,0CAAA,EAAA,MAAM,CAA2B,yBAAA,CAAA,CAAA;AAAA;AAE1G;AAQO,SAAS,mBAAA,CAAoB,aAAsB,SAA+C,EAAA;AACrG,EAAM,MAAA,eAAA,GAAkB,MAAM,eAAgB,EAAA;AAC9C,EAAA,MAAM,OAAU,GAAA,sBAAA,CAAuB,eAAiB,EAAA,WAAA,EAAa,SAAS,CAAA;AAC9E,EAAO,OAAA,OAAA;AACX;AAEO,SAAS,gBAAgB,GAAyB,EAAA;AACrD,EAAO,OAAA,CAAC,CAAC,iDAAA,EAAmD,GAAI,CAAA,GAAG,KAAK,CAAC,CAAC,mBAAqB,EAAA,GAAA,CAAI,GAAG,CAAA;AAC1G;AAEA,eAAsB,YAAA,CAAa,KAAgB,IAA0C,EAAA;AACzF,EAAI,IAAA,GAAA,CAAI,SAAS,SAAa,IAAA,CAAC,IAAI,MAAO,CAAA,QAAA,CAAS,MAAM,CAAG,EAAA;AACxD,IAAM,MAAA,IAAI,YAAa,CAAA,gCAAA,EAAkC,oBAAoB,CAAA;AAAA;AAEjF,EAAM,MAAA,eAAA,GAAkB,8CAA8C,GAAG,CAAA;AACzE,EAAM,MAAA,OAAA,GAAU,yBAAyB,IAAI,CAAA;AAC7C,EAAA,MAAM,SAAY,GAAA,MAAM,SAAU,CAAA,OAAA,EAAS,eAAe,CAAA;AAC1D,EAAA,OAAO,SAAU,CAAA,MAAA;AACrB;AAEA,eAAsB,cAAA,CAAe,GAAgB,EAAA,SAAA,EAAyB,IAAsC,EAAA;AAChH,EAAI,IAAA,GAAA,CAAI,SAAS,QAAY,IAAA,CAAC,IAAI,MAAO,CAAA,QAAA,CAAS,QAAQ,CAAG,EAAA;AACzD,IAAM,MAAA,IAAI,YAAa,CAAA,kCAAA,EAAoC,oBAAoB,CAAA;AAAA;AAEnF,EAAM,MAAA,cAAA,GAAiB,MAAM,iBAAA,CAAkB,GAAG,CAAA;AAClD,EAAI,IAAA;AACA,IAAO,OAAA,MAAM,YAAY,wBAAyB,CAAA,SAAS,GAAG,wBAAyB,CAAA,IAAI,GAAG,cAAc,CAAA;AAAA,GACxG,CAAA,MAAA;AACJ,IAAO,OAAA,KAAA;AAAA;AAEf;AAEA,SAAS,oBAAA,CAAqB,WAAgC,IAA4B,EAAA;AACtF,EAAM,MAAA,iBAAA,uBAAwB,GAAc,CAAA;AAAA,IACxC,GAAK,IAAS,KAAA,SAAA,GAAY,CAAC,QAAQ,CAAA,GAAI,CAAC,MAAM,CAAA;AAAA,IAC9C,GAAG;AAAA,GACN,CAAA;AACD,EAAA,IAAI,UAAU,IAAK,CAAA,CAAA,KAAA,KAAS,kBAAkB,GAAI,CAAA,KAAK,CAAC,CAAG,EAAA;AACvD,IAAM,MAAA,IAAI,YAAa,CAAA,yCAAA,EAA2C,aAAa,CAAA;AAAA;AAEvF;AAcO,SAAS,iBACZ,CAAA,MAAA,EACA,OACA,EAAA,WAAA,EACA,SACS,EAAA;AACT,EAAA,IAAI,WAAW,KAAO,EAAA;AAClB,IAAM,MAAA,KAAA,GAAQ,yBAAyB,OAAuB,CAAA;AAC9D,IAAA,oBAAA,CAAqB,WAAW,QAAQ,CAAA;AACxC,IAAI,IAAA,KAAA,CAAM,WAAW,EAAI,EAAA;AACrB,MAAM,MAAA,IAAI,YAAa,CAAA,2CAAA,EAA6C,WAAW,CAAA;AAAA;AAEnF,IAAA,MAAM,SAAY,GAAA;AAAA,MACd,CAAC,MAAO,CAAA,WAAW,GAAG,WAAA;AAAA,MACtB,WAAW,MAAO,CAAA,MAAA,CAAO,EAAE,IAAA,EAAM,WAAW,CAAA;AAAA,MAC5C,WAAA;AAAA,MACA,IAAM,EAAA,QAAA;AAAA,MACN,MAAA,EAAQ,OAAO,MAAO,CAAA,SAAA,CAAU,OAAO,CAAS,KAAA,KAAA,KAAA,KAAU,QAAQ,CAAC;AAAA,KACvE;AAEA,IAAM,MAAA,KAAA,GAAS,mBAAwB,qBAAA,IAAI,OAAQ,EAAA;AACnD,IAAM,KAAA,CAAA,GAAA,CAAI,WAAW,KAAK,CAAA;AAE1B,IAAO,OAAA,SAAA;AAAA;AAGX,EAAA,IAAI,WAAW,OAAS,EAAA;AACpB,IAAM,MAAA,KAAA,GAAQ,yBAAyB,OAAuB,CAAA;AAC9D,IAAA,oBAAA,CAAqB,WAAW,SAAS,CAAA;AAEzC,IAAI,IAAA,KAAA,CAAM,WAAW,EAAI,EAAA;AACrB,MAAM,MAAA,IAAI,YAAa,CAAA,iBAAA,EAAmB,WAAW,CAAA;AAAA;AAGzD,IAAA,MAAM,MAAS,GAAA,KAAA,CAAM,KAAM,CAAA,CAAA,EAAG,EAAE,CAAA;AAChC,IAAI,IAAA,CAAC,MAAO,CAAA,KAAA,CAAM,CAAC,GAAA,EAAK,MAAM,GAAQ,KAAA,oBAAA,CAAqB,CAAC,CAAC,CAAG,EAAA;AAC5D,MAAM,MAAA,IAAI,YAAa,CAAA,iBAAA,EAAmB,WAAW,CAAA;AAAA;AAEzD,IAAM,MAAA,cAAA,GAAiB,KAAM,CAAA,KAAA,CAAM,EAAE,CAAA;AAErC,IAAA,MAAM,UAAa,GAAA;AAAA,MACf,CAAC,MAAO,CAAA,WAAW,GAAG,WAAA;AAAA,MACtB,WAAW,MAAO,CAAA,MAAA,CAAO,EAAE,IAAA,EAAM,WAAW,CAAA;AAAA,MAC5C,WAAA;AAAA,MACA,IAAM,EAAA,SAAA;AAAA,MACN,MAAA,EAAQ,OAAO,MAAO,CAAA,SAAA,CAAU,OAAO,CAAS,KAAA,KAAA,KAAA,KAAU,MAAM,CAAC;AAAA,KACrE;AAEA,IAAM,MAAA,KAAA,GAAS,iDAAsD,qBAAA,IAAI,OAAQ,EAAA;AACjF,IAAM,KAAA,CAAA,GAAA,CAAI,YAAY,cAAc,CAAA;AAEpC,IAAO,OAAA,UAAA;AAAA;AAGX,EAAA,IAAI,WAAW,KAAO,EAAA;AAClB,IAAA,MAAM,GAAM,GAAA,OAAA;AACZ,IAAM,MAAA,IAAA,GAAO,GAAO,IAAA,GAAA,GAAM,SAAY,GAAA,QAAA;AACtC,IAAA,oBAAA,CAAqB,WAAW,IAAI,CAAA;AACpC,IAAA,MAAM,SAAS,IAAI,GAAA,CAAI,GAAI,CAAA,OAAA,IAAW,EAAE,CAAA;AACxC,IAAA,MAAM,aAAgB,GAAA,SAAA,CAAU,MAAW,KAAA,MAAA,CAAO,QAAQ,CAAC,GAAG,SAAS,CAAA,CAAE,KAAM,CAAA,CAAA,CAAA,KAAK,MAAO,CAAA,GAAA,CAAI,CAAC,CAAC,CAAA;AACjG,IAAI,IAAA,GAAA,CAAI,GAAQ,KAAA,KAAA,IAAS,GAAI,CAAA,GAAA,KAAQ,aAAa,GAAI,CAAA,GAAA,KAAQ,WAAe,IAAA,CAAC,aAAe,EAAA;AACzF,MAAM,MAAA,IAAI,YAAa,CAAA,qBAAA,EAAuB,WAAW,CAAA;AAAA;AAE7D,IAAA,IAAI,IAAS,KAAA,QAAA,IAAY,CAAC,GAAA,CAAI,CAAG,EAAA;AAC7B,MAAM,MAAA,IAAI,YAAa,CAAA,+CAAA,EAAiD,WAAW,CAAA;AAAA;AAEvF,IAAA,IAAI,IAAS,KAAA,SAAA,IAAa,CAAC,GAAA,CAAI,CAAG,EAAA;AAC9B,MAAM,MAAA,IAAI,YAAa,CAAA,gDAAA,EAAkD,WAAW,CAAA;AAAA;AAExF,IAAM,MAAA,WAAA,GAAc,IAAS,KAAA,QAAA,GAAW,QAAW,GAAA,MAAA;AACnD,IAAM,MAAA,GAAA,GAAM,OAAO,MAAO,CAAA;AAAA,MACtB,CAAC,MAAO,CAAA,WAAW,GAAG,WAAA;AAAA,MACtB,WAAW,MAAO,CAAA,MAAA,CAAO,EAAE,IAAA,EAAM,WAAW,CAAA;AAAA,MAC5C,WAAA;AAAA,MACA,IAAA;AAAA,MACA,MAAA,EAAQ,OAAO,MAAO,CAAA,SAAA,CAAU,OAAO,CAAS,KAAA,KAAA,KAAA,KAAU,WAAW,CAAC;AAAA,KACzE,CAAA;AAED,IAAA,IAAI,SAAS,QAAU,EAAA;AACnB,MAAM,MAAA,KAAA,GAAS,mBAAwB,qBAAA,IAAI,OAAQ,EAAA;AACnD,MAAA,KAAA,CAAM,GAAI,CAAA,GAAA,EAAK,eAAgB,CAAA,GAAA,CAAI,CAAE,CAAC,CAAA;AAAA,KACnC,MAAA;AACH,MAAM,MAAA,KAAA,GAAS,iDAAsD,qBAAA,IAAI,OAAQ,EAAA;AACjF,MAAA,KAAA,CAAM,GAAI,CAAA,GAAA,EAAK,eAAgB,CAAA,GAAA,CAAI,CAAE,CAAC,CAAA;AAAA;AAG1C,IAAO,OAAA,GAAA;AAAA;AAGX,EAAA,MAAM,IAAI,KAAA,CAAM,CAAkC,+BAAA,EAAA,MAAM,CAA2B,yBAAA,CAAA,CAAA;AACvF;;;ACjVA,SAAS,mBAAmB,wBAAwD,EAAA;AAChF,EAAA,MAAM,IACF,GAAA,OAAO,wBAA6B,KAAA,QAAA,GAAW,2BAA2B,wBAAyB,CAAA,IAAA;AACvG,EAAO,OAAA,IAAA,CAAK,cAAc,SAAW,EAAA,OAAA,EAAS,EAAE,WAAa,EAAA,MAAA,EAAQ,CAAM,KAAA,CAAA;AAC/E;AAwBO,SAAS,OAAU,GAAA;AAStB,EAAA,IAAoB,WAAW,eAAiB,EAAA;AAI5C,IAAM,MAAA,oBAAA,GAAwB,UAAW,CAAA,MAAA,KAAW,EAAC;AACrD,IAAM,MAAA,oBAAA,GAAyB,oBAA2D,CAAA,MAAA,KACtF,EAAC;AAKL,IAAA,MAAM,oBAAoB,oBAAqB,CAAA,SAAA;AAC/C,IAAqB,oBAAA,CAAA,SAAA,GAAa,UAAU,IAAgD,KAAA;AACxF,MAAM,MAAA,CAAC,CAAG,EAAA,GAAG,CAAI,GAAA,IAAA;AACjB,MAAI,IAAA,eAAA,CAAgB,GAAG,CAAG,EAAA;AACtB,QAAO,OAAA,MAAM,iBAAkB,CAAA,GAAG,IAAI,CAAA;AAAA,iBAC/B,iBAAmB,EAAA;AAC1B,QAAA,OAAO,MAAM,iBAAA,CAAkB,KAAM,CAAA,oBAAA,EAAsB,IAAI,CAAA;AAAA,OAC5D,MAAA;AACH,QAAM,MAAA,IAAI,UAAU,2DAA2D,CAAA;AAAA;AACnF,KACJ;AAKA,IAAA,MAAM,sBAAsB,oBAAqB,CAAA,WAAA;AACjD,IAAI,IAAA,kCAAA;AACJ,IAAqB,oBAAA,CAAA,WAAA,GAAe,UAAU,IAAkD,KAAA;AAC5F,MAAM,MAAA,CAAC,SAAS,CAAI,GAAA,IAAA;AACpB,MAAI,IAAA,CAAC,kBAAmB,CAAA,SAAS,CAAG,EAAA;AAChC,QAAA,IAAI,mBAAqB,EAAA;AACrB,UAAA,OAAO,MAAM,mBAAA,CAAoB,KAAM,CAAA,oBAAA,EAAsB,IAAI,CAAA;AAAA,SAC9D,MAAA;AACH,UAAM,MAAA,IAAI,UAAU,6DAA6D,CAAA;AAAA;AACrF;AAEJ,MAAI,IAAA,8BAAA;AACJ,MAAA,IAAI,uCAAuC,MAAW,EAAA;AAClD,QAAqC,kCAAA,GAAA,IAAI,QAAQ,CAAW,OAAA,KAAA;AACxD,UAAA,IAAI,CAAC,mBAAqB,EAAA;AACtB,YAAA,OAAA,CAAS,qCAAqC,KAAM,CAAA;AACpD,YAAA;AAAA;AAEJ,UAAA,mBAAA,CACK,KAAM,CAAA,oBAAA,EAAsB,IAAI,CAAA,CAChC,KAAK,CAAW,OAAA,KAAA;AACb,YAAA,IAAI,yBAAyB,YAAc,EAAA;AACvC,cAAQ,OAAA,CAAA,IAAA;AAAA,gBACJ;AAAA,eAKJ;AAAA;AAEJ,YAAI,IAAA,oBAAA,CAAqB,gBAAgB,mBAAqB,EAAA;AAC1D,cAAA,oBAAA,CAAqB,WAAc,GAAA,mBAAA;AAAA;AAEvC,YAAiC,8BAAA,GAAA,OAAA;AACjC,YAAA,OAAA,CAAS,qCAAqC,IAAK,CAAA;AAAA,WACtD,CACA,CAAA,KAAA,CAAM,MAAM;AACT,YAAA,OAAA,CAAS,qCAAqC,KAAM,CAAA;AAAA,WACvD,CAAA;AAAA,SACR,CAAA;AAAA;AAEL,MAAA,IACI,OAAO,kCAAA,KAAuC,SACxC,GAAA,kCAAA,GACA,MAAM,kCACd,EAAA;AACE,QAAA,IAAI,8BAAgC,EAAA;AAChC,UAAO,OAAA,8BAAA;AAAA,mBACA,mBAAqB,EAAA;AAC5B,UAAA,OAAO,MAAM,mBAAA,CAAoB,KAAM,CAAA,oBAAA,EAAsB,IAAI,CAAA;AAAA,SAC9D,MAAA;AACH,UAAM,MAAA,IAAI,UAAU,6DAA6D,CAAA;AAAA;AACrF,OACG,MAAA;AACH,QAAA,MAAM,CAAC,CAAA,EAAG,WAAa,EAAA,SAAS,CAAI,GAAA,IAAA;AACpC,QAAO,OAAA,mBAAA,CAAoB,aAAa,SAAS,CAAA;AAAA;AACrD,KACJ;AAKA,IAAA,MAAM,eAAe,oBAAqB,CAAA,IAAA;AAC1C,IAAqB,oBAAA,CAAA,IAAA,GAAQ,UAAU,IAA2C,KAAA;AAC9E,MAAM,MAAA,CAAC,CAAG,EAAA,GAAG,CAAI,GAAA,IAAA;AACjB,MAAI,IAAA,eAAA,CAAgB,GAAG,CAAG,EAAA;AACtB,QAAA,MAAM,CAACA,EAAAA,EAAG,GAAG,IAAI,CAAI,GAAA,IAAA;AACrB,QAAO,OAAA,MAAM,YAAa,CAAA,GAAG,IAAI,CAAA;AAAA,iBAC1B,YAAc,EAAA;AACrB,QAAA,OAAO,MAAM,YAAA,CAAa,KAAM,CAAA,oBAAA,EAAsB,IAAI,CAAA;AAAA,OACvD,MAAA;AACH,QAAM,MAAA,IAAI,UAAU,sDAAsD,CAAA;AAAA;AAC9E,KACJ;AAKA,IAAA,MAAM,iBAAiB,oBAAqB,CAAA,MAAA;AAC5C,IAAqB,oBAAA,CAAA,MAAA,GAAU,UAAU,IAA6C,KAAA;AAClF,MAAM,MAAA,CAAC,CAAG,EAAA,GAAG,CAAI,GAAA,IAAA;AACjB,MAAI,IAAA,eAAA,CAAgB,GAAG,CAAG,EAAA;AACtB,QAAA,MAAM,CAACA,EAAAA,EAAG,GAAG,IAAI,CAAI,GAAA,IAAA;AACrB,QAAO,OAAA,MAAM,cAAe,CAAA,GAAG,IAAI,CAAA;AAAA,iBAC5B,cAAgB,EAAA;AACvB,QAAA,OAAO,MAAM,cAAA,CAAe,KAAM,CAAA,oBAAA,EAAsB,IAAI,CAAA;AAAA,OACzD,MAAA;AACH,QAAM,MAAA,IAAI,UAAU,wDAAwD,CAAA;AAAA;AAChF,KACJ;AAKA,IAAA,MAAM,oBAAoB,oBAAqB,CAAA,SAAA;AAC/C,IAAI,IAAA,gCAAA;AACJ,IAAqB,oBAAA,CAAA,SAAA,GAAa,UAAU,IAAgD,KAAA;AACxF,MAAA,MAAM,CAAC,MAAA,EAAQ,OAAS,EAAA,SAAS,CAAI,GAAA,IAAA;AACrC,MAAI,IAAA,CAAC,kBAAmB,CAAA,SAAS,CAAG,EAAA;AAChC,QAAA,IAAI,iBAAmB,EAAA;AACnB,UAAA,OAAO,MAAM,iBAAA,CAAkB,KAAM,CAAA,oBAAA,EAAsB,IAAI,CAAA;AAAA,SAC5D,MAAA;AACH,UAAM,MAAA,IAAI,UAAU,2DAA2D,CAAA;AAAA;AACnF;AAEJ,MAAI,IAAA,yBAAA;AACJ,MAAA,IAAI,qCAAqC,MAAW,EAAA;AAChD,QAAmC,gCAAA,GAAA,IAAI,QAAQ,CAAW,OAAA,KAAA;AACtD,UAAA,IAAI,CAAC,iBAAmB,EAAA;AACpB,YAAA,OAAA,CAAS,mCAAmC,KAAM,CAAA;AAClD,YAAA;AAAA;AAEJ,UAAA,iBAAA,CACK,KAAM,CAAA,oBAAA,EAAsB,IAAI,CAAA,CAChC,KAAK,CAAO,GAAA,KAAA;AACT,YAAA,IAAI,yBAAyB,YAAc,EAAA;AACvC,cAAQ,OAAA,CAAA,IAAA;AAAA,gBACJ;AAAA,eAKJ;AAAA;AAEJ,YAAI,IAAA,oBAAA,CAAqB,cAAc,iBAAmB,EAAA;AACtD,cAAA,oBAAA,CAAqB,SAAY,GAAA,iBAAA;AAAA;AAErC,YAA4B,yBAAA,GAAA,GAAA;AAC5B,YAAA,OAAA,CAAS,mCAAmC,IAAK,CAAA;AAAA,WACpD,CACA,CAAA,KAAA,CAAM,MAAM;AACT,YAAA,OAAA,CAAS,mCAAmC,KAAM,CAAA;AAAA,WACrD,CAAA;AAAA,SACR,CAAA;AAAA;AAEL,MAAA,IACI,OAAO,iBAAA,KAAsB,SACvB,GAAA,gCAAA,GACA,MAAM,gCACd,EAAA;AACE,QAAA,IAAI,yBAA2B,EAAA;AAC3B,UAAO,OAAA,yBAAA;AAAA,mBACA,iBAAmB,EAAA;AAC1B,UAAA,OAAO,MAAM,iBAAA,CAAkB,KAAM,CAAA,oBAAA,EAAsB,IAAI,CAAA;AAAA,SAC5D,MAAA;AACH,UAAM,MAAA,IAAI,UAAU,2DAA2D,CAAA;AAAA;AACnF,OACG,MAAA;AACH,QAAA,MAAM,CAAC,OAAS,EAAA,QAAA,EAAU,UAAY,EAAA,WAAA,EAAa,SAAS,CAAI,GAAA,IAAA;AAChE,QAAA,OAAO,iBAAkB,CAAA,MAAA,EAAQ,OAAS,EAAA,WAAA,EAAa,SAAS,CAAA;AAAA;AACpE,KACJ;AAAA;AAER","file":"index.browser.mjs","sourcesContent":["/**\n * HEY! <== SECRET KEY KOALA\n * |/ <== WOULD LIKE YOUR\n * ʕ·͡ᴥ·ʔ <== ATTENTION PLEASE\n *\n * Key material generated in this module must stay in this module. So long as the secrets cache and\n * the methods that interact with it are not exported from `@solana/webcrypto-ed25519-polyfill`,\n * accidental logging of the actual bytes of a secret key (eg. to the console, or to a remote\n * server) should not be possible.\n *\n * WARNING: This does not imply that the secrets cache is secure against supply-chain attacks.\n * Untrusted code in your JavaScript context can easily override `WeakMap.prototype.set` to steal\n * private keys as they are written to the cache, without alerting you to its presence or affecting\n * the regular operation of the cache.\n */\nimport { getPublicKeyAsync, signAsync, utils, verifyAsync } from '@noble/ed25519';\n\nconst PROHIBITED_KEY_USAGES = new Set<KeyUsage>([\n 'decrypt',\n 'deriveBits',\n 'deriveKey',\n 'encrypt',\n 'unwrapKey',\n 'wrapKey',\n]);\n\nconst ED25519_PKCS8_HEADER =\n // prettier-ignore\n [\n /**\n * PKCS#8 header\n */\n 0x30, // ASN.1 sequence tag\n 0x2e, // Length of sequence (46 more bytes)\n\n 0x02, // ASN.1 integer tag\n 0x01, // Length of integer\n 0x00, // Version number\n\n 0x30, // ASN.1 sequence tag\n 0x05, // Length of sequence\n 0x06, // ASN.1 object identifier tag\n 0x03, // Length of object identifier\n // Edwards curve algorithms identifier https://oid-rep.orange-labs.fr/get/1.3.101.112\n 0x2b, // iso(1) / identified-organization(3) (The first node is multiplied by the decimal 40 and the result is added to the value of the second node)\n 0x65, // thawte(101)\n // Ed25519 identifier\n 0x70, // id-Ed25519(112)\n\n /**\n * Private key payload\n */\n 0x04, // ASN.1 octet string tag\n 0x22, // String length (34 more bytes)\n\n // Private key bytes as octet string\n 0x04, // ASN.1 octet string tag\n 0x20, // String length (32 bytes)\n ];\n\nfunction bufferSourceToUint8Array(data: BufferSource): Uint8Array {\n return data instanceof Uint8Array ? data : new Uint8Array(ArrayBuffer.isView(data) ? data.buffer : data);\n}\n\nlet storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT: WeakMap<CryptoKey, Uint8Array> | undefined;\n\n// Map of public key bytes. These are the result of calling `getPublicKey`\nlet publicKeyBytesStore: WeakMap<CryptoKey, Uint8Array> | undefined;\n\nfunction createKeyPairFromBytes(\n bytes: Uint8Array,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKeyPair {\n const keyPair = createKeyPair_INTERNAL_ONLY_DO_NOT_EXPORT(extractable, keyUsages);\n const cache = (storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= new WeakMap());\n cache.set(keyPair.privateKey, bytes);\n cache.set(keyPair.publicKey, bytes);\n return keyPair;\n}\n\nfunction createKeyPair_INTERNAL_ONLY_DO_NOT_EXPORT(\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKeyPair {\n if (keyUsages.length === 0) {\n throw new DOMException('Usages cannot be empty when creating a key.', 'SyntaxError');\n }\n if (keyUsages.some(usage => PROHIBITED_KEY_USAGES.has(usage))) {\n throw new DOMException('Unsupported key usage for an Ed25519 key.', 'SyntaxError');\n }\n const base = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n };\n const privateKey = {\n ...base,\n extractable,\n type: 'private',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'sign')) as KeyUsage[],\n } as CryptoKey;\n const publicKey = {\n ...base,\n extractable: true,\n type: 'public',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'verify')) as KeyUsage[],\n } as CryptoKey;\n return Object.freeze({\n privateKey: Object.freeze(privateKey),\n publicKey: Object.freeze(publicKey),\n });\n}\n\nfunction getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key: CryptoKey): Uint8Array {\n const secretKeyBytes = storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT?.get(key);\n if (secretKeyBytes === undefined) {\n throw new Error('Could not find secret key material associated with this `CryptoKey`');\n }\n return secretKeyBytes;\n}\n\nasync function getPublicKeyBytes(key: CryptoKey): Promise<Uint8Array> {\n // Try to find the key in the public key store first\n const publicKeyStore = (publicKeyBytesStore ||= new WeakMap());\n const fromPublicStore = publicKeyStore.get(key);\n if (fromPublicStore) return fromPublicStore;\n\n // If not available, get the key from the secrets store instead\n const publicKeyBytes = await getPublicKeyAsync(getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key));\n\n // Store the public key bytes in the public key store for next time\n publicKeyStore.set(key, publicKeyBytes);\n return publicKeyBytes;\n}\n\nfunction base64UrlEncode(bytes: Uint8Array): string {\n return btoa(Array.from(bytes, b => String.fromCharCode(b)).join(''))\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+$/, '');\n}\n\nfunction base64UrlDecode(value: string): Uint8Array {\n const m = value.length % 4;\n const base64Value = value\n .replace(/-/g, '+')\n .replace(/_/g, '/')\n .padEnd(value.length + (m === 0 ? 0 : 4 - m), '=');\n return Uint8Array.from(atob(base64Value), c => c.charCodeAt(0));\n}\n\nexport async function exportKeyPolyfill(format: 'jwk', key: CryptoKey): Promise<JsonWebKey>;\nexport async function exportKeyPolyfill(format: KeyFormat, key: CryptoKey): Promise<ArrayBuffer>;\nexport async function exportKeyPolyfill(format: KeyFormat, key: CryptoKey): Promise<ArrayBuffer | JsonWebKey> {\n if (key.extractable === false) {\n throw new DOMException('key is not extractable', 'InvalidAccessException');\n }\n switch (format) {\n case 'raw': {\n if (key.type !== 'public') {\n throw new DOMException(`Unable to export a raw Ed25519 ${key.type} key`, 'InvalidAccessError');\n }\n const publicKeyBytes = await getPublicKeyBytes(key);\n return publicKeyBytes.buffer as ArrayBuffer;\n }\n case 'pkcs8': {\n if (key.type !== 'private') {\n throw new DOMException(`Unable to export a pkcs8 Ed25519 ${key.type} key`, 'InvalidAccessError');\n }\n const secretKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);\n const result = new Uint8Array(ED25519_PKCS8_HEADER.length + secretKeyBytes.length);\n result.set(ED25519_PKCS8_HEADER, 0);\n result.set(secretKeyBytes, ED25519_PKCS8_HEADER.length);\n return result.buffer;\n }\n case 'jwk': {\n const publicKeyBytes = await getPublicKeyBytes(key);\n const base = {\n crv /* curve */: 'Ed25519',\n ext /* extractable */: key.extractable,\n key_ops /* key operations */: key.usages,\n kty /* key type */: 'OKP' /* octet key pair */,\n x /* public key x-coordinate (base64-URL encoded) */: base64UrlEncode(publicKeyBytes),\n };\n if (key.type === 'private') {\n const secretKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);\n return Object.freeze({\n ...base,\n d /* private key (base64-URL encoded) */: base64UrlEncode(secretKeyBytes),\n });\n }\n return Object.freeze({ ...base });\n }\n default:\n throw new Error(`Exporting polyfilled Ed25519 keys in the \"${format}\" format is unimplemented`);\n }\n}\n\n/**\n * This function generates a key pair and stores the secret bytes associated with it in a\n * module-private cache. Instead of vending the actual secret bytes, it returns a `CryptoKeyPair`\n * that you can use with other methods in this package to produce signatures and derive public keys\n * associated with the secret.\n */\nexport function generateKeyPolyfill(extractable: boolean, keyUsages: readonly KeyUsage[]): CryptoKeyPair {\n const privateKeyBytes = utils.randomSecretKey();\n const keyPair = createKeyPairFromBytes(privateKeyBytes, extractable, keyUsages);\n return keyPair;\n}\n\nexport function isPolyfilledKey(key: CryptoKey): boolean {\n return !!storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT?.has(key) || !!publicKeyBytesStore?.has(key);\n}\n\nexport async function signPolyfill(key: CryptoKey, data: BufferSource): Promise<ArrayBuffer> {\n if (key.type !== 'private' || !key.usages.includes('sign')) {\n throw new DOMException('Unable to use this key to sign', 'InvalidAccessError');\n }\n const privateKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);\n const payload = bufferSourceToUint8Array(data);\n const signature = await signAsync(payload, privateKeyBytes);\n return signature.buffer as ArrayBuffer;\n}\n\nexport async function verifyPolyfill(key: CryptoKey, signature: BufferSource, data: BufferSource): Promise<boolean> {\n if (key.type !== 'public' || !key.usages.includes('verify')) {\n throw new DOMException('Unable to use this key to verify', 'InvalidAccessError');\n }\n const publicKeyBytes = await getPublicKeyBytes(key);\n try {\n return await verifyAsync(bufferSourceToUint8Array(signature), bufferSourceToUint8Array(data), publicKeyBytes);\n } catch {\n return false;\n }\n}\n\nfunction assertValidKeyUsages(keyUsages: readonly KeyUsage[], type: 'private' | 'public') {\n const prohibitedKeyUses = new Set<KeyUsage>([\n ...((type === 'private' ? ['verify'] : ['sign']) as KeyUsage[]),\n ...PROHIBITED_KEY_USAGES,\n ]);\n if (keyUsages.some(usage => prohibitedKeyUses.has(usage))) {\n throw new DOMException('Unsupported key usage for a Ed25519 key', 'SyntaxError');\n }\n}\n\nexport function importKeyPolyfill(\n format: 'jwk',\n keyData: JsonWebKey,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKey;\nexport function importKeyPolyfill(\n format: Exclude<KeyFormat, 'jwk'>,\n keyData: BufferSource,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKey;\nexport function importKeyPolyfill(\n format: KeyFormat,\n keyData: BufferSource | JsonWebKey,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKey {\n if (format === 'raw') {\n const bytes = bufferSourceToUint8Array(keyData as BufferSource);\n assertValidKeyUsages(keyUsages, 'public');\n if (bytes.length !== 32) {\n throw new DOMException('Ed25519 raw keys must be exactly 32-bytes', 'DataError');\n }\n const publicKey = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n extractable,\n type: 'public',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'verify')) as KeyUsage[],\n } as CryptoKey;\n\n const cache = (publicKeyBytesStore ||= new WeakMap());\n cache.set(publicKey, bytes);\n\n return publicKey;\n }\n\n if (format === 'pkcs8') {\n const bytes = bufferSourceToUint8Array(keyData as BufferSource);\n assertValidKeyUsages(keyUsages, 'private');\n // 48 bytes: 16-byte PKCS8 header + 32 byte secret key\n if (bytes.length !== 48) {\n throw new DOMException('Invalid keyData', 'DataError');\n }\n // Must start with exactly the Ed25519 pkcs8 header\n const header = bytes.slice(0, 16);\n if (!header.every((val, i) => val === ED25519_PKCS8_HEADER[i])) {\n throw new DOMException('Invalid keyData', 'DataError');\n }\n const secretKeyBytes = bytes.slice(16);\n\n const privateKey = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n extractable,\n type: 'private',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'sign')) as KeyUsage[],\n } as CryptoKey;\n\n const cache = (storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= new WeakMap());\n cache.set(privateKey, secretKeyBytes);\n\n return privateKey;\n }\n\n if (format === 'jwk') {\n const jwk = keyData as JsonWebKey;\n const type = 'd' in jwk ? 'private' : 'public';\n assertValidKeyUsages(keyUsages, type);\n const keyOps = new Set(jwk.key_ops ?? []);\n const sameKeyUsages = keyUsages.length === keyOps.size && [...keyUsages].every(x => keyOps.has(x));\n if (jwk.kty !== 'OKP' || jwk.crv !== 'Ed25519' || jwk.ext !== extractable || !sameKeyUsages) {\n throw new DOMException('Invalid Ed25519 JWK', 'DataError');\n }\n if (type === 'public' && !jwk.x) {\n throw new DOMException('Ed25519 JWK is missing public key coordinates', 'DataError');\n }\n if (type === 'private' && !jwk.d) {\n throw new DOMException('Ed25519 JWK is missing private key coordinates', 'DataError');\n }\n const usageToKeep = type === 'public' ? 'verify' : 'sign';\n const key = Object.freeze({\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n extractable,\n type,\n usages: Object.freeze(keyUsages.filter(usage => usage === usageToKeep)) as KeyUsage[],\n }) as CryptoKey;\n\n if (type === 'public') {\n const cache = (publicKeyBytesStore ||= new WeakMap());\n cache.set(key, base64UrlDecode(jwk.x!));\n } else {\n const cache = (storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= new WeakMap());\n cache.set(key, base64UrlDecode(jwk.d!));\n }\n\n return key;\n }\n\n throw new Error(`Importing Ed25519 keys in the \"${format}\" format is unimplemented`);\n}\n","import cryptoImpl from '@solana/crypto-impl';\n\nimport {\n exportKeyPolyfill,\n generateKeyPolyfill,\n importKeyPolyfill,\n isPolyfilledKey,\n signPolyfill,\n verifyPolyfill,\n} from './secrets';\n\nfunction isAlgorithmEd25519(putativeEd25519Algorithm: AlgorithmIdentifier): boolean {\n const name =\n typeof putativeEd25519Algorithm === 'string' ? putativeEd25519Algorithm : putativeEd25519Algorithm.name;\n return name.localeCompare('Ed25519', 'en-US', { sensitivity: 'base' }) === 0;\n}\n\n/**\n * Polyfills methods on `globalThis.SubtleCrypto` to add support for the Ed25519 algorithm.\n *\n * @example\n * ```ts\n * import { install } from '@solana/webcrypto-ed25519-polyfill';\n *\n * // Calling this will shim methods on `SubtleCrypto`, adding Ed25519 support.\n * install();\n *\n * // Now you can do this, in environments that do not otherwise support Ed25519.\n * const keyPair = await crypto.subtle.generateKey({ name: 'Ed25519' }, false, ['sign']);\n * const publicKeyBytes = await crypto.subtle.exportKey('raw', keyPair.publicKey);\n * const data = new Uint8Array([1, 2, 3]);\n * const signature = await crypto.subtle.sign({ name: 'Ed25519' }, keyPair.privateKey, data);\n * if (await crypto.subtle.verify({ name: 'Ed25519' }, keyPair.publicKey, signature, data)) {\n * console.log('Data was signed using the private key associated with this public key');\n * } else {\n * throw new Error('Signature verification error');\n * }\n * ```\n */\nexport function install() {\n if (__NODEJS__) {\n /**\n * Node only sets the `crypto` global variable when run with `--experimental-global-webcrypto`.\n * Let's set it unconditionally here.\n */\n globalThis.crypto ||= cryptoImpl;\n }\n\n if (!__BROWSER__ || globalThis.isSecureContext) {\n /**\n * Create `crypto.subtle` if it doesn't exist.\n */\n const originalCryptoObject = (globalThis.crypto ||= {} as Crypto);\n const originalSubtleCrypto = ((originalCryptoObject as Crypto & { subtle: SubtleCrypto }).subtle ||=\n {} as SubtleCrypto);\n\n /**\n * Override `SubtleCrypto#exportKey`\n */\n const originalExportKey = originalSubtleCrypto.exportKey as SubtleCrypto['exportKey'] | undefined;\n originalSubtleCrypto.exportKey = (async (...args: Parameters<SubtleCrypto['exportKey']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n return await exportKeyPolyfill(...args);\n } else if (originalExportKey) {\n return await originalExportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `exportKey` function exists to handle this call');\n }\n }) as SubtleCrypto['exportKey'];\n\n /**\n * Override `SubtleCrypto#generateKey`\n */\n const originalGenerateKey = originalSubtleCrypto.generateKey as SubtleCrypto['generateKey'] | undefined;\n let originalGenerateKeySupportsEd25519: Promise<boolean> | boolean | undefined;\n originalSubtleCrypto.generateKey = (async (...args: Parameters<SubtleCrypto['generateKey']>) => {\n const [algorithm] = args;\n if (!isAlgorithmEd25519(algorithm)) {\n if (originalGenerateKey) {\n return await originalGenerateKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `generateKey` function exists to handle this call');\n }\n }\n let optimisticallyGeneratedKeyPair;\n if (originalGenerateKeySupportsEd25519 === undefined) {\n originalGenerateKeySupportsEd25519 = new Promise(resolve => {\n if (!originalGenerateKey) {\n resolve((originalGenerateKeySupportsEd25519 = false));\n return;\n }\n originalGenerateKey\n .apply(originalSubtleCrypto, args)\n .then(keyPair => {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n '`@solana/webcrypto-ed25519-polyfill` was installed in an ' +\n 'environment that supports Ed25519 key manipulation ' +\n 'natively. Falling back to the native implementation. ' +\n 'Consider installing this polyfill only in environments where ' +\n 'Ed25519 is not supported.',\n );\n }\n if (originalSubtleCrypto.generateKey !== originalGenerateKey) {\n originalSubtleCrypto.generateKey = originalGenerateKey;\n }\n optimisticallyGeneratedKeyPair = keyPair;\n resolve((originalGenerateKeySupportsEd25519 = true));\n })\n .catch(() => {\n resolve((originalGenerateKeySupportsEd25519 = false));\n });\n });\n }\n if (\n typeof originalGenerateKeySupportsEd25519 === 'boolean'\n ? originalGenerateKeySupportsEd25519\n : await originalGenerateKeySupportsEd25519\n ) {\n if (optimisticallyGeneratedKeyPair) {\n return optimisticallyGeneratedKeyPair;\n } else if (originalGenerateKey) {\n return await originalGenerateKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `generateKey` function exists to handle this call');\n }\n } else {\n const [_, extractable, keyUsages] = args;\n return generateKeyPolyfill(extractable, keyUsages);\n }\n }) as SubtleCrypto['generateKey'];\n\n /**\n * Override `SubtleCrypto#sign`\n */\n const originalSign = originalSubtleCrypto.sign as SubtleCrypto['sign'] | undefined;\n originalSubtleCrypto.sign = (async (...args: Parameters<SubtleCrypto['sign']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n const [_, ...rest] = args;\n return await signPolyfill(...rest);\n } else if (originalSign) {\n return await originalSign.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `sign` function exists to handle this call');\n }\n }) as SubtleCrypto['sign'];\n\n /**\n * Override `SubtleCrypto#verify`\n */\n const originalVerify = originalSubtleCrypto.verify as SubtleCrypto['verify'] | undefined;\n originalSubtleCrypto.verify = (async (...args: Parameters<SubtleCrypto['verify']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n const [_, ...rest] = args;\n return await verifyPolyfill(...rest);\n } else if (originalVerify) {\n return await originalVerify.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `verify` function exists to handle this call');\n }\n }) as SubtleCrypto['verify'];\n\n /**\n * Override `SubtleCrypto#importKey`\n */\n const originalImportKey = originalSubtleCrypto.importKey as SubtleCrypto['importKey'] | undefined;\n let originalImportKeySupportsEd25519: Promise<boolean> | boolean | undefined;\n originalSubtleCrypto.importKey = (async (...args: Parameters<SubtleCrypto['importKey']>) => {\n const [format, keyData, algorithm] = args;\n if (!isAlgorithmEd25519(algorithm)) {\n if (originalImportKey) {\n return await originalImportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `importKey` function exists to handle this call');\n }\n }\n let optimisticallyImportedKey;\n if (originalImportKeySupportsEd25519 === undefined) {\n originalImportKeySupportsEd25519 = new Promise(resolve => {\n if (!originalImportKey) {\n resolve((originalImportKeySupportsEd25519 = false));\n return;\n }\n originalImportKey\n .apply(originalSubtleCrypto, args)\n .then(key => {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n '`@solana/webcrypto-ed25519-polyfill` was included in an ' +\n 'environment that supports Ed25519 key manipulation ' +\n 'natively. Falling back to the native implementation. ' +\n 'Consider including this polyfill only in environments where ' +\n 'Ed25519 is not supported.',\n );\n }\n if (originalSubtleCrypto.importKey !== originalImportKey) {\n originalSubtleCrypto.importKey = originalImportKey;\n }\n optimisticallyImportedKey = key;\n resolve((originalImportKeySupportsEd25519 = true));\n })\n .catch(() => {\n resolve((originalImportKeySupportsEd25519 = false));\n });\n });\n }\n if (\n typeof originalImportKey === 'boolean'\n ? originalImportKeySupportsEd25519\n : await originalImportKeySupportsEd25519\n ) {\n if (optimisticallyImportedKey) {\n return optimisticallyImportedKey;\n } else if (originalImportKey) {\n return await originalImportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `importKey` function exists to handle this call');\n }\n } else {\n const [_format, _keyData, _algorithm, extractable, keyUsages] = args;\n return importKeyPolyfill(format, keyData, extractable, keyUsages);\n }\n }) as SubtleCrypto['importKey'];\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/secrets.ts","../src/install.ts"],"names":["_"],"mappings":"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","file":"index.browser.mjs","sourcesContent":["/**\n * HEY! <== SECRET KEY KOALA\n * |/ <== WOULD LIKE YOUR\n * ʕ·͡ᴥ·ʔ <== ATTENTION PLEASE\n *\n * Key material generated in this module must stay in this module. So long as the secrets cache and\n * the methods that interact with it are not exported from `@solana/webcrypto-ed25519-polyfill`,\n * accidental logging of the actual bytes of a secret key (eg. to the console, or to a remote\n * server) should not be possible.\n *\n * WARNING: This does not imply that the secrets cache is secure against supply-chain attacks.\n * Untrusted code in your JavaScript context can easily override `WeakMap.prototype.set` to steal\n * private keys as they are written to the cache, without alerting you to its presence or affecting\n * the regular operation of the cache.\n */\nimport { getPublicKeyAsync, signAsync, utils, verifyAsync } from '@noble/ed25519';\n\nconst PROHIBITED_KEY_USAGES = new Set<KeyUsage>([\n 'decrypt',\n 'deriveBits',\n 'deriveKey',\n 'encrypt',\n 'unwrapKey',\n 'wrapKey',\n]);\n\nconst ED25519_PKCS8_HEADER =\n // prettier-ignore\n [\n /**\n * PKCS#8 header\n */\n 0x30, // ASN.1 sequence tag\n 0x2e, // Length of sequence (46 more bytes)\n\n 0x02, // ASN.1 integer tag\n 0x01, // Length of integer\n 0x00, // Version number\n\n 0x30, // ASN.1 sequence tag\n 0x05, // Length of sequence\n 0x06, // ASN.1 object identifier tag\n 0x03, // Length of object identifier\n // Edwards curve algorithms identifier https://oid-rep.orange-labs.fr/get/1.3.101.112\n 0x2b, // iso(1) / identified-organization(3) (The first node is multiplied by the decimal 40 and the result is added to the value of the second node)\n 0x65, // thawte(101)\n // Ed25519 identifier\n 0x70, // id-Ed25519(112)\n\n /**\n * Private key payload\n */\n 0x04, // ASN.1 octet string tag\n 0x22, // String length (34 more bytes)\n\n // Private key bytes as octet string\n 0x04, // ASN.1 octet string tag\n 0x20, // String length (32 bytes)\n ];\n\nfunction bufferSourceToUint8Array(data: BufferSource): Uint8Array {\n return data instanceof Uint8Array ? data : new Uint8Array(ArrayBuffer.isView(data) ? data.buffer : data);\n}\n\nlet storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT: WeakMap<CryptoKey, Uint8Array> | undefined;\n\n// Map of public key bytes. These are the result of calling `getPublicKey`\nlet publicKeyBytesStore: WeakMap<CryptoKey, Uint8Array> | undefined;\n\nfunction createKeyPairFromBytes(\n bytes: Uint8Array,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKeyPair {\n const keyPair = createKeyPair_INTERNAL_ONLY_DO_NOT_EXPORT(extractable, keyUsages);\n const cache = (storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= new WeakMap());\n cache.set(keyPair.privateKey, bytes);\n cache.set(keyPair.publicKey, bytes);\n return keyPair;\n}\n\nfunction createKeyPair_INTERNAL_ONLY_DO_NOT_EXPORT(\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKeyPair {\n if (keyUsages.length === 0) {\n throw new DOMException('Usages cannot be empty when creating a key.', 'SyntaxError');\n }\n if (keyUsages.some(usage => PROHIBITED_KEY_USAGES.has(usage))) {\n throw new DOMException('Unsupported key usage for an Ed25519 key.', 'SyntaxError');\n }\n const base = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n };\n const privateKey = {\n ...base,\n extractable,\n type: 'private',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'sign')) as KeyUsage[],\n } as CryptoKey;\n const publicKey = {\n ...base,\n extractable: true,\n type: 'public',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'verify')) as KeyUsage[],\n } as CryptoKey;\n return Object.freeze({\n privateKey: Object.freeze(privateKey),\n publicKey: Object.freeze(publicKey),\n });\n}\n\nfunction getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key: CryptoKey): Uint8Array {\n const secretKeyBytes = storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT?.get(key);\n if (secretKeyBytes === undefined) {\n throw new Error('Could not find secret key material associated with this `CryptoKey`');\n }\n return secretKeyBytes;\n}\n\nasync function getPublicKeyBytes(key: CryptoKey): Promise<Uint8Array> {\n // Try to find the key in the public key store first\n const publicKeyStore = (publicKeyBytesStore ||= new WeakMap());\n const fromPublicStore = publicKeyStore.get(key);\n if (fromPublicStore) return fromPublicStore;\n\n // If not available, get the key from the secrets store instead\n const publicKeyBytes = await getPublicKeyAsync(getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key));\n\n // Store the public key bytes in the public key store for next time\n publicKeyStore.set(key, publicKeyBytes);\n return publicKeyBytes;\n}\n\nfunction base64UrlEncode(bytes: Uint8Array): string {\n return btoa(Array.from(bytes, b => String.fromCharCode(b)).join(''))\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+$/, '');\n}\n\nfunction base64UrlDecode(value: string): Uint8Array {\n const m = value.length % 4;\n const base64Value = value\n .replace(/-/g, '+')\n .replace(/_/g, '/')\n .padEnd(value.length + (m === 0 ? 0 : 4 - m), '=');\n return Uint8Array.from(atob(base64Value), c => c.charCodeAt(0));\n}\n\nexport async function exportKeyPolyfill(format: 'jwk', key: CryptoKey): Promise<JsonWebKey>;\nexport async function exportKeyPolyfill(format: KeyFormat, key: CryptoKey): Promise<ArrayBuffer>;\nexport async function exportKeyPolyfill(format: KeyFormat, key: CryptoKey): Promise<ArrayBuffer | JsonWebKey> {\n if (key.extractable === false) {\n throw new DOMException('key is not extractable', 'InvalidAccessException');\n }\n switch (format) {\n case 'raw': {\n if (key.type !== 'public') {\n throw new DOMException(`Unable to export a raw Ed25519 ${key.type} key`, 'InvalidAccessError');\n }\n const publicKeyBytes = await getPublicKeyBytes(key);\n return publicKeyBytes.buffer as ArrayBuffer;\n }\n case 'pkcs8': {\n if (key.type !== 'private') {\n throw new DOMException(`Unable to export a pkcs8 Ed25519 ${key.type} key`, 'InvalidAccessError');\n }\n const secretKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);\n const result = new Uint8Array(ED25519_PKCS8_HEADER.length + secretKeyBytes.length);\n result.set(ED25519_PKCS8_HEADER, 0);\n result.set(secretKeyBytes, ED25519_PKCS8_HEADER.length);\n return result.buffer;\n }\n case 'jwk': {\n const publicKeyBytes = await getPublicKeyBytes(key);\n const base = {\n crv /* curve */: 'Ed25519',\n ext /* extractable */: key.extractable,\n key_ops /* key operations */: key.usages,\n kty /* key type */: 'OKP' /* octet key pair */,\n x /* public key x-coordinate (base64-URL encoded) */: base64UrlEncode(publicKeyBytes),\n };\n if (key.type === 'private') {\n const secretKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);\n return Object.freeze({\n ...base,\n d /* private key (base64-URL encoded) */: base64UrlEncode(secretKeyBytes),\n });\n }\n return Object.freeze({ ...base });\n }\n default:\n throw new Error(`Exporting polyfilled Ed25519 keys in the \"${format}\" format is unimplemented`);\n }\n}\n\n/**\n * This function generates a key pair and stores the secret bytes associated with it in a\n * module-private cache. Instead of vending the actual secret bytes, it returns a `CryptoKeyPair`\n * that you can use with other methods in this package to produce signatures and derive public keys\n * associated with the secret.\n */\nexport function generateKeyPolyfill(extractable: boolean, keyUsages: readonly KeyUsage[]): CryptoKeyPair {\n const privateKeyBytes = utils.randomSecretKey();\n const keyPair = createKeyPairFromBytes(privateKeyBytes, extractable, keyUsages);\n return keyPair;\n}\n\nexport function isPolyfilledKey(key: CryptoKey): boolean {\n return !!storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT?.has(key) || !!publicKeyBytesStore?.has(key);\n}\n\nexport async function signPolyfill(key: CryptoKey, data: BufferSource): Promise<ArrayBuffer> {\n if (key.type !== 'private' || !key.usages.includes('sign')) {\n throw new DOMException('Unable to use this key to sign', 'InvalidAccessError');\n }\n const privateKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);\n const payload = bufferSourceToUint8Array(data);\n const signature = await signAsync(payload, privateKeyBytes);\n return signature.buffer as ArrayBuffer;\n}\n\nexport async function verifyPolyfill(key: CryptoKey, signature: BufferSource, data: BufferSource): Promise<boolean> {\n if (key.type !== 'public' || !key.usages.includes('verify')) {\n throw new DOMException('Unable to use this key to verify', 'InvalidAccessError');\n }\n const publicKeyBytes = await getPublicKeyBytes(key);\n try {\n return await verifyAsync(bufferSourceToUint8Array(signature), bufferSourceToUint8Array(data), publicKeyBytes);\n } catch {\n return false;\n }\n}\n\nfunction assertValidKeyUsages(keyUsages: readonly KeyUsage[], type: 'private' | 'public') {\n const prohibitedKeyUses = new Set<KeyUsage>([\n ...((type === 'private' ? ['verify'] : ['sign']) as KeyUsage[]),\n ...PROHIBITED_KEY_USAGES,\n ]);\n if (keyUsages.some(usage => prohibitedKeyUses.has(usage))) {\n throw new DOMException('Unsupported key usage for a Ed25519 key', 'SyntaxError');\n }\n}\n\nexport function importKeyPolyfill(\n format: 'jwk',\n keyData: JsonWebKey,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKey;\nexport function importKeyPolyfill(\n format: Exclude<KeyFormat, 'jwk'>,\n keyData: BufferSource,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKey;\nexport function importKeyPolyfill(\n format: KeyFormat,\n keyData: BufferSource | JsonWebKey,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKey {\n if (format === 'raw') {\n const bytes = bufferSourceToUint8Array(keyData as BufferSource);\n assertValidKeyUsages(keyUsages, 'public');\n if (bytes.length !== 32) {\n throw new DOMException('Ed25519 raw keys must be exactly 32-bytes', 'DataError');\n }\n const publicKey = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n extractable,\n type: 'public',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'verify')) as KeyUsage[],\n } as CryptoKey;\n\n const cache = (publicKeyBytesStore ||= new WeakMap());\n cache.set(publicKey, bytes);\n\n return publicKey;\n }\n\n if (format === 'pkcs8') {\n const bytes = bufferSourceToUint8Array(keyData as BufferSource);\n assertValidKeyUsages(keyUsages, 'private');\n // 48 bytes: 16-byte PKCS8 header + 32 byte secret key\n if (bytes.length !== 48) {\n throw new DOMException('Invalid keyData', 'DataError');\n }\n // Must start with exactly the Ed25519 pkcs8 header\n const header = bytes.slice(0, 16);\n if (!header.every((val, i) => val === ED25519_PKCS8_HEADER[i])) {\n throw new DOMException('Invalid keyData', 'DataError');\n }\n const secretKeyBytes = bytes.slice(16);\n\n const privateKey = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n extractable,\n type: 'private',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'sign')) as KeyUsage[],\n } as CryptoKey;\n\n const cache = (storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= new WeakMap());\n cache.set(privateKey, secretKeyBytes);\n\n return privateKey;\n }\n\n if (format === 'jwk') {\n const jwk = keyData as JsonWebKey;\n const type = 'd' in jwk ? 'private' : 'public';\n assertValidKeyUsages(keyUsages, type);\n const keyOps = new Set(jwk.key_ops ?? []);\n const sameKeyUsages = keyUsages.length === keyOps.size && [...keyUsages].every(x => keyOps.has(x));\n if (jwk.kty !== 'OKP' || jwk.crv !== 'Ed25519' || jwk.ext !== extractable || !sameKeyUsages) {\n throw new DOMException('Invalid Ed25519 JWK', 'DataError');\n }\n if (type === 'public' && !jwk.x) {\n throw new DOMException('Ed25519 JWK is missing public key coordinates', 'DataError');\n }\n if (type === 'private' && !jwk.d) {\n throw new DOMException('Ed25519 JWK is missing private key coordinates', 'DataError');\n }\n const usageToKeep = type === 'public' ? 'verify' : 'sign';\n const key = Object.freeze({\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n extractable,\n type,\n usages: Object.freeze(keyUsages.filter(usage => usage === usageToKeep)) as KeyUsage[],\n }) as CryptoKey;\n\n if (type === 'public') {\n const cache = (publicKeyBytesStore ||= new WeakMap());\n cache.set(key, base64UrlDecode(jwk.x!));\n } else {\n const cache = (storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= new WeakMap());\n cache.set(key, base64UrlDecode(jwk.d!));\n }\n\n return key;\n }\n\n throw new Error(`Importing Ed25519 keys in the \"${format}\" format is unimplemented`);\n}\n","import cryptoImpl from '@solana/crypto-impl';\n\nimport {\n exportKeyPolyfill,\n generateKeyPolyfill,\n importKeyPolyfill,\n isPolyfilledKey,\n signPolyfill,\n verifyPolyfill,\n} from './secrets';\n\nfunction isAlgorithmEd25519(putativeEd25519Algorithm: AlgorithmIdentifier): boolean {\n const name =\n typeof putativeEd25519Algorithm === 'string' ? putativeEd25519Algorithm : putativeEd25519Algorithm.name;\n return name.localeCompare('Ed25519', 'en-US', { sensitivity: 'base' }) === 0;\n}\n\n/**\n * Polyfills methods on `globalThis.SubtleCrypto` to add support for the Ed25519 algorithm.\n *\n * @example\n * ```ts\n * import { install } from '@solana/webcrypto-ed25519-polyfill';\n *\n * // Calling this will shim methods on `SubtleCrypto`, adding Ed25519 support.\n * install();\n *\n * // Now you can do this, in environments that do not otherwise support Ed25519.\n * const keyPair = await crypto.subtle.generateKey({ name: 'Ed25519' }, false, ['sign']);\n * const publicKeyBytes = await crypto.subtle.exportKey('raw', keyPair.publicKey);\n * const data = new Uint8Array([1, 2, 3]);\n * const signature = await crypto.subtle.sign({ name: 'Ed25519' }, keyPair.privateKey, data);\n * if (await crypto.subtle.verify({ name: 'Ed25519' }, keyPair.publicKey, signature, data)) {\n * console.log('Data was signed using the private key associated with this public key');\n * } else {\n * throw new Error('Signature verification error');\n * }\n * ```\n */\nexport function install() {\n if (__NODEJS__) {\n /**\n * Node only sets the `crypto` global variable when run with `--experimental-global-webcrypto`.\n * Let's set it unconditionally here.\n */\n globalThis.crypto ||= cryptoImpl;\n }\n\n if (!__BROWSER__ || globalThis.isSecureContext) {\n /**\n * Create `crypto.subtle` if it doesn't exist.\n */\n const originalCryptoObject = (globalThis.crypto ||= {} as Crypto);\n const originalSubtleCrypto = ((originalCryptoObject as Crypto & { subtle: SubtleCrypto }).subtle ||=\n {} as SubtleCrypto);\n\n /**\n * Override `SubtleCrypto#exportKey`\n */\n const originalExportKey = originalSubtleCrypto.exportKey as SubtleCrypto['exportKey'] | undefined;\n originalSubtleCrypto.exportKey = (async (...args: Parameters<SubtleCrypto['exportKey']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n return await exportKeyPolyfill(...args);\n } else if (originalExportKey) {\n return await originalExportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `exportKey` function exists to handle this call');\n }\n }) as SubtleCrypto['exportKey'];\n\n /**\n * Override `SubtleCrypto#generateKey`\n */\n const originalGenerateKey = originalSubtleCrypto.generateKey as SubtleCrypto['generateKey'] | undefined;\n let originalGenerateKeySupportsEd25519: Promise<boolean> | boolean | undefined;\n originalSubtleCrypto.generateKey = (async (...args: Parameters<SubtleCrypto['generateKey']>) => {\n const [algorithm] = args;\n if (!isAlgorithmEd25519(algorithm)) {\n if (originalGenerateKey) {\n return await originalGenerateKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `generateKey` function exists to handle this call');\n }\n }\n let optimisticallyGeneratedKeyPair;\n if (originalGenerateKeySupportsEd25519 === undefined) {\n originalGenerateKeySupportsEd25519 = new Promise(resolve => {\n if (!originalGenerateKey) {\n resolve((originalGenerateKeySupportsEd25519 = false));\n return;\n }\n originalGenerateKey\n .apply(originalSubtleCrypto, args)\n .then(keyPair => {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n '`@solana/webcrypto-ed25519-polyfill` was installed in an ' +\n 'environment that supports Ed25519 key manipulation ' +\n 'natively. Falling back to the native implementation. ' +\n 'Consider installing this polyfill only in environments where ' +\n 'Ed25519 is not supported.',\n );\n }\n if (originalSubtleCrypto.generateKey !== originalGenerateKey) {\n originalSubtleCrypto.generateKey = originalGenerateKey;\n }\n optimisticallyGeneratedKeyPair = keyPair;\n resolve((originalGenerateKeySupportsEd25519 = true));\n })\n .catch(() => {\n resolve((originalGenerateKeySupportsEd25519 = false));\n });\n });\n }\n if (\n typeof originalGenerateKeySupportsEd25519 === 'boolean'\n ? originalGenerateKeySupportsEd25519\n : await originalGenerateKeySupportsEd25519\n ) {\n if (optimisticallyGeneratedKeyPair) {\n return optimisticallyGeneratedKeyPair;\n } else if (originalGenerateKey) {\n return await originalGenerateKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `generateKey` function exists to handle this call');\n }\n } else {\n const [_, extractable, keyUsages] = args;\n return generateKeyPolyfill(extractable, keyUsages);\n }\n }) as SubtleCrypto['generateKey'];\n\n /**\n * Override `SubtleCrypto#sign`\n */\n const originalSign = originalSubtleCrypto.sign as SubtleCrypto['sign'] | undefined;\n originalSubtleCrypto.sign = (async (...args: Parameters<SubtleCrypto['sign']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n const [_, ...rest] = args;\n return await signPolyfill(...rest);\n } else if (originalSign) {\n return await originalSign.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `sign` function exists to handle this call');\n }\n }) as SubtleCrypto['sign'];\n\n /**\n * Override `SubtleCrypto#verify`\n */\n const originalVerify = originalSubtleCrypto.verify as SubtleCrypto['verify'] | undefined;\n originalSubtleCrypto.verify = (async (...args: Parameters<SubtleCrypto['verify']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n const [_, ...rest] = args;\n return await verifyPolyfill(...rest);\n } else if (originalVerify) {\n return await originalVerify.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `verify` function exists to handle this call');\n }\n }) as SubtleCrypto['verify'];\n\n /**\n * Override `SubtleCrypto#importKey`\n */\n const originalImportKey = originalSubtleCrypto.importKey as SubtleCrypto['importKey'] | undefined;\n let originalImportKeySupportsEd25519: Promise<boolean> | boolean | undefined;\n originalSubtleCrypto.importKey = (async (...args: Parameters<SubtleCrypto['importKey']>) => {\n const [format, keyData, algorithm] = args;\n if (!isAlgorithmEd25519(algorithm)) {\n if (originalImportKey) {\n return await originalImportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `importKey` function exists to handle this call');\n }\n }\n let optimisticallyImportedKey;\n if (originalImportKeySupportsEd25519 === undefined) {\n originalImportKeySupportsEd25519 = new Promise(resolve => {\n if (!originalImportKey) {\n resolve((originalImportKeySupportsEd25519 = false));\n return;\n }\n originalImportKey\n .apply(originalSubtleCrypto, args)\n .then(key => {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n '`@solana/webcrypto-ed25519-polyfill` was included in an ' +\n 'environment that supports Ed25519 key manipulation ' +\n 'natively. Falling back to the native implementation. ' +\n 'Consider including this polyfill only in environments where ' +\n 'Ed25519 is not supported.',\n );\n }\n if (originalSubtleCrypto.importKey !== originalImportKey) {\n originalSubtleCrypto.importKey = originalImportKey;\n }\n optimisticallyImportedKey = key;\n resolve((originalImportKeySupportsEd25519 = true));\n })\n .catch(() => {\n resolve((originalImportKeySupportsEd25519 = false));\n });\n });\n }\n if (\n typeof originalImportKey === 'boolean'\n ? originalImportKeySupportsEd25519\n : await originalImportKeySupportsEd25519\n ) {\n if (optimisticallyImportedKey) {\n return optimisticallyImportedKey;\n } else if (originalImportKey) {\n return await originalImportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `importKey` function exists to handle this call');\n }\n } else {\n const [_format, _keyData, _algorithm, extractable, keyUsages] = args;\n return importKeyPolyfill(format, keyData, extractable, keyUsages);\n }\n }) as SubtleCrypto['importKey'];\n }\n}\n"]}
|
package/dist/index.native.mjs
CHANGED
|
@@ -284,7 +284,7 @@ function install() {
|
|
|
284
284
|
const originalCryptoObject = globalThis.crypto ||= {};
|
|
285
285
|
const originalSubtleCrypto = originalCryptoObject.subtle ||= {};
|
|
286
286
|
const originalExportKey = originalSubtleCrypto.exportKey;
|
|
287
|
-
originalSubtleCrypto.exportKey = async (...args) => {
|
|
287
|
+
originalSubtleCrypto.exportKey = (async (...args) => {
|
|
288
288
|
const [_, key] = args;
|
|
289
289
|
if (isPolyfilledKey(key)) {
|
|
290
290
|
return await exportKeyPolyfill(...args);
|
|
@@ -293,10 +293,10 @@ function install() {
|
|
|
293
293
|
} else {
|
|
294
294
|
throw new TypeError("No native `exportKey` function exists to handle this call");
|
|
295
295
|
}
|
|
296
|
-
};
|
|
296
|
+
});
|
|
297
297
|
const originalGenerateKey = originalSubtleCrypto.generateKey;
|
|
298
298
|
let originalGenerateKeySupportsEd25519;
|
|
299
|
-
originalSubtleCrypto.generateKey = async (...args) => {
|
|
299
|
+
originalSubtleCrypto.generateKey = (async (...args) => {
|
|
300
300
|
const [algorithm] = args;
|
|
301
301
|
if (!isAlgorithmEd25519(algorithm)) {
|
|
302
302
|
if (originalGenerateKey) {
|
|
@@ -340,9 +340,9 @@ function install() {
|
|
|
340
340
|
const [_, extractable, keyUsages] = args;
|
|
341
341
|
return generateKeyPolyfill(extractable, keyUsages);
|
|
342
342
|
}
|
|
343
|
-
};
|
|
343
|
+
});
|
|
344
344
|
const originalSign = originalSubtleCrypto.sign;
|
|
345
|
-
originalSubtleCrypto.sign = async (...args) => {
|
|
345
|
+
originalSubtleCrypto.sign = (async (...args) => {
|
|
346
346
|
const [_, key] = args;
|
|
347
347
|
if (isPolyfilledKey(key)) {
|
|
348
348
|
const [_2, ...rest] = args;
|
|
@@ -352,9 +352,9 @@ function install() {
|
|
|
352
352
|
} else {
|
|
353
353
|
throw new TypeError("No native `sign` function exists to handle this call");
|
|
354
354
|
}
|
|
355
|
-
};
|
|
355
|
+
});
|
|
356
356
|
const originalVerify = originalSubtleCrypto.verify;
|
|
357
|
-
originalSubtleCrypto.verify = async (...args) => {
|
|
357
|
+
originalSubtleCrypto.verify = (async (...args) => {
|
|
358
358
|
const [_, key] = args;
|
|
359
359
|
if (isPolyfilledKey(key)) {
|
|
360
360
|
const [_2, ...rest] = args;
|
|
@@ -364,10 +364,10 @@ function install() {
|
|
|
364
364
|
} else {
|
|
365
365
|
throw new TypeError("No native `verify` function exists to handle this call");
|
|
366
366
|
}
|
|
367
|
-
};
|
|
367
|
+
});
|
|
368
368
|
const originalImportKey = originalSubtleCrypto.importKey;
|
|
369
369
|
let originalImportKeySupportsEd25519;
|
|
370
|
-
originalSubtleCrypto.importKey = async (...args) => {
|
|
370
|
+
originalSubtleCrypto.importKey = (async (...args) => {
|
|
371
371
|
const [format, keyData, algorithm] = args;
|
|
372
372
|
if (!isAlgorithmEd25519(algorithm)) {
|
|
373
373
|
if (originalImportKey) {
|
|
@@ -411,7 +411,7 @@ function install() {
|
|
|
411
411
|
const [_format, _keyData, _algorithm, extractable, keyUsages] = args;
|
|
412
412
|
return importKeyPolyfill(format, keyData, extractable, keyUsages);
|
|
413
413
|
}
|
|
414
|
-
};
|
|
414
|
+
});
|
|
415
415
|
}
|
|
416
416
|
}
|
|
417
417
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/secrets.ts","../src/install.ts"],"names":["_"],"mappings":"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","file":"index.native.mjs","sourcesContent":["/**\n * HEY! <== SECRET KEY KOALA\n * |/ <== WOULD LIKE YOUR\n * ʕ·͡ᴥ·ʔ <== ATTENTION PLEASE\n *\n * Key material generated in this module must stay in this module. So long as the secrets cache and\n * the methods that interact with it are not exported from `@solana/webcrypto-ed25519-polyfill`,\n * accidental logging of the actual bytes of a secret key (eg. to the console, or to a remote\n * server) should not be possible.\n *\n * WARNING: This does not imply that the secrets cache is secure against supply-chain attacks.\n * Untrusted code in your JavaScript context can easily override `WeakMap.prototype.set` to steal\n * private keys as they are written to the cache, without alerting you to its presence or affecting\n * the regular operation of the cache.\n */\nimport { getPublicKeyAsync, signAsync, utils, verifyAsync } from '@noble/ed25519';\n\nconst PROHIBITED_KEY_USAGES = new Set<KeyUsage>([\n 'decrypt',\n 'deriveBits',\n 'deriveKey',\n 'encrypt',\n 'unwrapKey',\n 'wrapKey',\n]);\n\nconst ED25519_PKCS8_HEADER =\n // prettier-ignore\n [\n /**\n * PKCS#8 header\n */\n 0x30, // ASN.1 sequence tag\n 0x2e, // Length of sequence (46 more bytes)\n\n 0x02, // ASN.1 integer tag\n 0x01, // Length of integer\n 0x00, // Version number\n\n 0x30, // ASN.1 sequence tag\n 0x05, // Length of sequence\n 0x06, // ASN.1 object identifier tag\n 0x03, // Length of object identifier\n // Edwards curve algorithms identifier https://oid-rep.orange-labs.fr/get/1.3.101.112\n 0x2b, // iso(1) / identified-organization(3) (The first node is multiplied by the decimal 40 and the result is added to the value of the second node)\n 0x65, // thawte(101)\n // Ed25519 identifier\n 0x70, // id-Ed25519(112)\n\n /**\n * Private key payload\n */\n 0x04, // ASN.1 octet string tag\n 0x22, // String length (34 more bytes)\n\n // Private key bytes as octet string\n 0x04, // ASN.1 octet string tag\n 0x20, // String length (32 bytes)\n ];\n\nfunction bufferSourceToUint8Array(data: BufferSource): Uint8Array {\n return data instanceof Uint8Array ? data : new Uint8Array(ArrayBuffer.isView(data) ? data.buffer : data);\n}\n\nlet storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT: WeakMap<CryptoKey, Uint8Array> | undefined;\n\n// Map of public key bytes. These are the result of calling `getPublicKey`\nlet publicKeyBytesStore: WeakMap<CryptoKey, Uint8Array> | undefined;\n\nfunction createKeyPairFromBytes(\n bytes: Uint8Array,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKeyPair {\n const keyPair = createKeyPair_INTERNAL_ONLY_DO_NOT_EXPORT(extractable, keyUsages);\n const cache = (storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= new WeakMap());\n cache.set(keyPair.privateKey, bytes);\n cache.set(keyPair.publicKey, bytes);\n return keyPair;\n}\n\nfunction createKeyPair_INTERNAL_ONLY_DO_NOT_EXPORT(\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKeyPair {\n if (keyUsages.length === 0) {\n throw new DOMException('Usages cannot be empty when creating a key.', 'SyntaxError');\n }\n if (keyUsages.some(usage => PROHIBITED_KEY_USAGES.has(usage))) {\n throw new DOMException('Unsupported key usage for an Ed25519 key.', 'SyntaxError');\n }\n const base = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n };\n const privateKey = {\n ...base,\n extractable,\n type: 'private',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'sign')) as KeyUsage[],\n } as CryptoKey;\n const publicKey = {\n ...base,\n extractable: true,\n type: 'public',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'verify')) as KeyUsage[],\n } as CryptoKey;\n return Object.freeze({\n privateKey: Object.freeze(privateKey),\n publicKey: Object.freeze(publicKey),\n });\n}\n\nfunction getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key: CryptoKey): Uint8Array {\n const secretKeyBytes = storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT?.get(key);\n if (secretKeyBytes === undefined) {\n throw new Error('Could not find secret key material associated with this `CryptoKey`');\n }\n return secretKeyBytes;\n}\n\nasync function getPublicKeyBytes(key: CryptoKey): Promise<Uint8Array> {\n // Try to find the key in the public key store first\n const publicKeyStore = (publicKeyBytesStore ||= new WeakMap());\n const fromPublicStore = publicKeyStore.get(key);\n if (fromPublicStore) return fromPublicStore;\n\n // If not available, get the key from the secrets store instead\n const publicKeyBytes = await getPublicKeyAsync(getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key));\n\n // Store the public key bytes in the public key store for next time\n publicKeyStore.set(key, publicKeyBytes);\n return publicKeyBytes;\n}\n\nfunction base64UrlEncode(bytes: Uint8Array): string {\n return btoa(Array.from(bytes, b => String.fromCharCode(b)).join(''))\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+$/, '');\n}\n\nfunction base64UrlDecode(value: string): Uint8Array {\n const m = value.length % 4;\n const base64Value = value\n .replace(/-/g, '+')\n .replace(/_/g, '/')\n .padEnd(value.length + (m === 0 ? 0 : 4 - m), '=');\n return Uint8Array.from(atob(base64Value), c => c.charCodeAt(0));\n}\n\nexport async function exportKeyPolyfill(format: 'jwk', key: CryptoKey): Promise<JsonWebKey>;\nexport async function exportKeyPolyfill(format: KeyFormat, key: CryptoKey): Promise<ArrayBuffer>;\nexport async function exportKeyPolyfill(format: KeyFormat, key: CryptoKey): Promise<ArrayBuffer | JsonWebKey> {\n if (key.extractable === false) {\n throw new DOMException('key is not extractable', 'InvalidAccessException');\n }\n switch (format) {\n case 'raw': {\n if (key.type !== 'public') {\n throw new DOMException(`Unable to export a raw Ed25519 ${key.type} key`, 'InvalidAccessError');\n }\n const publicKeyBytes = await getPublicKeyBytes(key);\n return publicKeyBytes.buffer as ArrayBuffer;\n }\n case 'pkcs8': {\n if (key.type !== 'private') {\n throw new DOMException(`Unable to export a pkcs8 Ed25519 ${key.type} key`, 'InvalidAccessError');\n }\n const secretKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);\n const result = new Uint8Array(ED25519_PKCS8_HEADER.length + secretKeyBytes.length);\n result.set(ED25519_PKCS8_HEADER, 0);\n result.set(secretKeyBytes, ED25519_PKCS8_HEADER.length);\n return result.buffer;\n }\n case 'jwk': {\n const publicKeyBytes = await getPublicKeyBytes(key);\n const base = {\n crv /* curve */: 'Ed25519',\n ext /* extractable */: key.extractable,\n key_ops /* key operations */: key.usages,\n kty /* key type */: 'OKP' /* octet key pair */,\n x /* public key x-coordinate (base64-URL encoded) */: base64UrlEncode(publicKeyBytes),\n };\n if (key.type === 'private') {\n const secretKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);\n return Object.freeze({\n ...base,\n d /* private key (base64-URL encoded) */: base64UrlEncode(secretKeyBytes),\n });\n }\n return Object.freeze({ ...base });\n }\n default:\n throw new Error(`Exporting polyfilled Ed25519 keys in the \"${format}\" format is unimplemented`);\n }\n}\n\n/**\n * This function generates a key pair and stores the secret bytes associated with it in a\n * module-private cache. Instead of vending the actual secret bytes, it returns a `CryptoKeyPair`\n * that you can use with other methods in this package to produce signatures and derive public keys\n * associated with the secret.\n */\nexport function generateKeyPolyfill(extractable: boolean, keyUsages: readonly KeyUsage[]): CryptoKeyPair {\n const privateKeyBytes = utils.randomSecretKey();\n const keyPair = createKeyPairFromBytes(privateKeyBytes, extractable, keyUsages);\n return keyPair;\n}\n\nexport function isPolyfilledKey(key: CryptoKey): boolean {\n return !!storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT?.has(key) || !!publicKeyBytesStore?.has(key);\n}\n\nexport async function signPolyfill(key: CryptoKey, data: BufferSource): Promise<ArrayBuffer> {\n if (key.type !== 'private' || !key.usages.includes('sign')) {\n throw new DOMException('Unable to use this key to sign', 'InvalidAccessError');\n }\n const privateKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);\n const payload = bufferSourceToUint8Array(data);\n const signature = await signAsync(payload, privateKeyBytes);\n return signature.buffer as ArrayBuffer;\n}\n\nexport async function verifyPolyfill(key: CryptoKey, signature: BufferSource, data: BufferSource): Promise<boolean> {\n if (key.type !== 'public' || !key.usages.includes('verify')) {\n throw new DOMException('Unable to use this key to verify', 'InvalidAccessError');\n }\n const publicKeyBytes = await getPublicKeyBytes(key);\n try {\n return await verifyAsync(bufferSourceToUint8Array(signature), bufferSourceToUint8Array(data), publicKeyBytes);\n } catch {\n return false;\n }\n}\n\nfunction assertValidKeyUsages(keyUsages: readonly KeyUsage[], type: 'private' | 'public') {\n const prohibitedKeyUses = new Set<KeyUsage>([\n ...((type === 'private' ? ['verify'] : ['sign']) as KeyUsage[]),\n ...PROHIBITED_KEY_USAGES,\n ]);\n if (keyUsages.some(usage => prohibitedKeyUses.has(usage))) {\n throw new DOMException('Unsupported key usage for a Ed25519 key', 'SyntaxError');\n }\n}\n\nexport function importKeyPolyfill(\n format: 'jwk',\n keyData: JsonWebKey,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKey;\nexport function importKeyPolyfill(\n format: Exclude<KeyFormat, 'jwk'>,\n keyData: BufferSource,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKey;\nexport function importKeyPolyfill(\n format: KeyFormat,\n keyData: BufferSource | JsonWebKey,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKey {\n if (format === 'raw') {\n const bytes = bufferSourceToUint8Array(keyData as BufferSource);\n assertValidKeyUsages(keyUsages, 'public');\n if (bytes.length !== 32) {\n throw new DOMException('Ed25519 raw keys must be exactly 32-bytes', 'DataError');\n }\n const publicKey = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n extractable,\n type: 'public',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'verify')) as KeyUsage[],\n } as CryptoKey;\n\n const cache = (publicKeyBytesStore ||= new WeakMap());\n cache.set(publicKey, bytes);\n\n return publicKey;\n }\n\n if (format === 'pkcs8') {\n const bytes = bufferSourceToUint8Array(keyData as BufferSource);\n assertValidKeyUsages(keyUsages, 'private');\n // 48 bytes: 16-byte PKCS8 header + 32 byte secret key\n if (bytes.length !== 48) {\n throw new DOMException('Invalid keyData', 'DataError');\n }\n // Must start with exactly the Ed25519 pkcs8 header\n const header = bytes.slice(0, 16);\n if (!header.every((val, i) => val === ED25519_PKCS8_HEADER[i])) {\n throw new DOMException('Invalid keyData', 'DataError');\n }\n const secretKeyBytes = bytes.slice(16);\n\n const privateKey = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n extractable,\n type: 'private',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'sign')) as KeyUsage[],\n } as CryptoKey;\n\n const cache = (storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= new WeakMap());\n cache.set(privateKey, secretKeyBytes);\n\n return privateKey;\n }\n\n if (format === 'jwk') {\n const jwk = keyData as JsonWebKey;\n const type = 'd' in jwk ? 'private' : 'public';\n assertValidKeyUsages(keyUsages, type);\n const keyOps = new Set(jwk.key_ops ?? []);\n const sameKeyUsages = keyUsages.length === keyOps.size && [...keyUsages].every(x => keyOps.has(x));\n if (jwk.kty !== 'OKP' || jwk.crv !== 'Ed25519' || jwk.ext !== extractable || !sameKeyUsages) {\n throw new DOMException('Invalid Ed25519 JWK', 'DataError');\n }\n if (type === 'public' && !jwk.x) {\n throw new DOMException('Ed25519 JWK is missing public key coordinates', 'DataError');\n }\n if (type === 'private' && !jwk.d) {\n throw new DOMException('Ed25519 JWK is missing private key coordinates', 'DataError');\n }\n const usageToKeep = type === 'public' ? 'verify' : 'sign';\n const key = Object.freeze({\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n extractable,\n type,\n usages: Object.freeze(keyUsages.filter(usage => usage === usageToKeep)) as KeyUsage[],\n }) as CryptoKey;\n\n if (type === 'public') {\n const cache = (publicKeyBytesStore ||= new WeakMap());\n cache.set(key, base64UrlDecode(jwk.x!));\n } else {\n const cache = (storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= new WeakMap());\n cache.set(key, base64UrlDecode(jwk.d!));\n }\n\n return key;\n }\n\n throw new Error(`Importing Ed25519 keys in the \"${format}\" format is unimplemented`);\n}\n","import cryptoImpl from '@solana/crypto-impl';\n\nimport {\n exportKeyPolyfill,\n generateKeyPolyfill,\n importKeyPolyfill,\n isPolyfilledKey,\n signPolyfill,\n verifyPolyfill,\n} from './secrets';\n\nfunction isAlgorithmEd25519(putativeEd25519Algorithm: AlgorithmIdentifier): boolean {\n const name =\n typeof putativeEd25519Algorithm === 'string' ? putativeEd25519Algorithm : putativeEd25519Algorithm.name;\n return name.localeCompare('Ed25519', 'en-US', { sensitivity: 'base' }) === 0;\n}\n\n/**\n * Polyfills methods on `globalThis.SubtleCrypto` to add support for the Ed25519 algorithm.\n *\n * @example\n * ```ts\n * import { install } from '@solana/webcrypto-ed25519-polyfill';\n *\n * // Calling this will shim methods on `SubtleCrypto`, adding Ed25519 support.\n * install();\n *\n * // Now you can do this, in environments that do not otherwise support Ed25519.\n * const keyPair = await crypto.subtle.generateKey({ name: 'Ed25519' }, false, ['sign']);\n * const publicKeyBytes = await crypto.subtle.exportKey('raw', keyPair.publicKey);\n * const data = new Uint8Array([1, 2, 3]);\n * const signature = await crypto.subtle.sign({ name: 'Ed25519' }, keyPair.privateKey, data);\n * if (await crypto.subtle.verify({ name: 'Ed25519' }, keyPair.publicKey, signature, data)) {\n * console.log('Data was signed using the private key associated with this public key');\n * } else {\n * throw new Error('Signature verification error');\n * }\n * ```\n */\nexport function install() {\n if (__NODEJS__) {\n /**\n * Node only sets the `crypto` global variable when run with `--experimental-global-webcrypto`.\n * Let's set it unconditionally here.\n */\n globalThis.crypto ||= cryptoImpl;\n }\n\n if (!__BROWSER__ || globalThis.isSecureContext) {\n /**\n * Create `crypto.subtle` if it doesn't exist.\n */\n const originalCryptoObject = (globalThis.crypto ||= {} as Crypto);\n const originalSubtleCrypto = ((originalCryptoObject as Crypto & { subtle: SubtleCrypto }).subtle ||=\n {} as SubtleCrypto);\n\n /**\n * Override `SubtleCrypto#exportKey`\n */\n const originalExportKey = originalSubtleCrypto.exportKey as SubtleCrypto['exportKey'] | undefined;\n originalSubtleCrypto.exportKey = (async (...args: Parameters<SubtleCrypto['exportKey']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n return await exportKeyPolyfill(...args);\n } else if (originalExportKey) {\n return await originalExportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `exportKey` function exists to handle this call');\n }\n }) as SubtleCrypto['exportKey'];\n\n /**\n * Override `SubtleCrypto#generateKey`\n */\n const originalGenerateKey = originalSubtleCrypto.generateKey as SubtleCrypto['generateKey'] | undefined;\n let originalGenerateKeySupportsEd25519: Promise<boolean> | boolean | undefined;\n originalSubtleCrypto.generateKey = (async (...args: Parameters<SubtleCrypto['generateKey']>) => {\n const [algorithm] = args;\n if (!isAlgorithmEd25519(algorithm)) {\n if (originalGenerateKey) {\n return await originalGenerateKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `generateKey` function exists to handle this call');\n }\n }\n let optimisticallyGeneratedKeyPair;\n if (originalGenerateKeySupportsEd25519 === undefined) {\n originalGenerateKeySupportsEd25519 = new Promise(resolve => {\n if (!originalGenerateKey) {\n resolve((originalGenerateKeySupportsEd25519 = false));\n return;\n }\n originalGenerateKey\n .apply(originalSubtleCrypto, args)\n .then(keyPair => {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n '`@solana/webcrypto-ed25519-polyfill` was installed in an ' +\n 'environment that supports Ed25519 key manipulation ' +\n 'natively. Falling back to the native implementation. ' +\n 'Consider installing this polyfill only in environments where ' +\n 'Ed25519 is not supported.',\n );\n }\n if (originalSubtleCrypto.generateKey !== originalGenerateKey) {\n originalSubtleCrypto.generateKey = originalGenerateKey;\n }\n optimisticallyGeneratedKeyPair = keyPair;\n resolve((originalGenerateKeySupportsEd25519 = true));\n })\n .catch(() => {\n resolve((originalGenerateKeySupportsEd25519 = false));\n });\n });\n }\n if (\n typeof originalGenerateKeySupportsEd25519 === 'boolean'\n ? originalGenerateKeySupportsEd25519\n : await originalGenerateKeySupportsEd25519\n ) {\n if (optimisticallyGeneratedKeyPair) {\n return optimisticallyGeneratedKeyPair;\n } else if (originalGenerateKey) {\n return await originalGenerateKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `generateKey` function exists to handle this call');\n }\n } else {\n const [_, extractable, keyUsages] = args;\n return generateKeyPolyfill(extractable, keyUsages);\n }\n }) as SubtleCrypto['generateKey'];\n\n /**\n * Override `SubtleCrypto#sign`\n */\n const originalSign = originalSubtleCrypto.sign as SubtleCrypto['sign'] | undefined;\n originalSubtleCrypto.sign = (async (...args: Parameters<SubtleCrypto['sign']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n const [_, ...rest] = args;\n return await signPolyfill(...rest);\n } else if (originalSign) {\n return await originalSign.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `sign` function exists to handle this call');\n }\n }) as SubtleCrypto['sign'];\n\n /**\n * Override `SubtleCrypto#verify`\n */\n const originalVerify = originalSubtleCrypto.verify as SubtleCrypto['verify'] | undefined;\n originalSubtleCrypto.verify = (async (...args: Parameters<SubtleCrypto['verify']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n const [_, ...rest] = args;\n return await verifyPolyfill(...rest);\n } else if (originalVerify) {\n return await originalVerify.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `verify` function exists to handle this call');\n }\n }) as SubtleCrypto['verify'];\n\n /**\n * Override `SubtleCrypto#importKey`\n */\n const originalImportKey = originalSubtleCrypto.importKey as SubtleCrypto['importKey'] | undefined;\n let originalImportKeySupportsEd25519: Promise<boolean> | boolean | undefined;\n originalSubtleCrypto.importKey = (async (...args: Parameters<SubtleCrypto['importKey']>) => {\n const [format, keyData, algorithm] = args;\n if (!isAlgorithmEd25519(algorithm)) {\n if (originalImportKey) {\n return await originalImportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `importKey` function exists to handle this call');\n }\n }\n let optimisticallyImportedKey;\n if (originalImportKeySupportsEd25519 === undefined) {\n originalImportKeySupportsEd25519 = new Promise(resolve => {\n if (!originalImportKey) {\n resolve((originalImportKeySupportsEd25519 = false));\n return;\n }\n originalImportKey\n .apply(originalSubtleCrypto, args)\n .then(key => {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n '`@solana/webcrypto-ed25519-polyfill` was included in an ' +\n 'environment that supports Ed25519 key manipulation ' +\n 'natively. Falling back to the native implementation. ' +\n 'Consider including this polyfill only in environments where ' +\n 'Ed25519 is not supported.',\n );\n }\n if (originalSubtleCrypto.importKey !== originalImportKey) {\n originalSubtleCrypto.importKey = originalImportKey;\n }\n optimisticallyImportedKey = key;\n resolve((originalImportKeySupportsEd25519 = true));\n })\n .catch(() => {\n resolve((originalImportKeySupportsEd25519 = false));\n });\n });\n }\n if (\n typeof originalImportKey === 'boolean'\n ? originalImportKeySupportsEd25519\n : await originalImportKeySupportsEd25519\n ) {\n if (optimisticallyImportedKey) {\n return optimisticallyImportedKey;\n } else if (originalImportKey) {\n return await originalImportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `importKey` function exists to handle this call');\n }\n } else {\n const [_format, _keyData, _algorithm, extractable, keyUsages] = args;\n return importKeyPolyfill(format, keyData, extractable, keyUsages);\n }\n }) as SubtleCrypto['importKey'];\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/secrets.ts","../src/install.ts"],"names":["_"],"mappings":"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","file":"index.native.mjs","sourcesContent":["/**\n * HEY! <== SECRET KEY KOALA\n * |/ <== WOULD LIKE YOUR\n * ʕ·͡ᴥ·ʔ <== ATTENTION PLEASE\n *\n * Key material generated in this module must stay in this module. So long as the secrets cache and\n * the methods that interact with it are not exported from `@solana/webcrypto-ed25519-polyfill`,\n * accidental logging of the actual bytes of a secret key (eg. to the console, or to a remote\n * server) should not be possible.\n *\n * WARNING: This does not imply that the secrets cache is secure against supply-chain attacks.\n * Untrusted code in your JavaScript context can easily override `WeakMap.prototype.set` to steal\n * private keys as they are written to the cache, without alerting you to its presence or affecting\n * the regular operation of the cache.\n */\nimport { getPublicKeyAsync, signAsync, utils, verifyAsync } from '@noble/ed25519';\n\nconst PROHIBITED_KEY_USAGES = new Set<KeyUsage>([\n 'decrypt',\n 'deriveBits',\n 'deriveKey',\n 'encrypt',\n 'unwrapKey',\n 'wrapKey',\n]);\n\nconst ED25519_PKCS8_HEADER =\n // prettier-ignore\n [\n /**\n * PKCS#8 header\n */\n 0x30, // ASN.1 sequence tag\n 0x2e, // Length of sequence (46 more bytes)\n\n 0x02, // ASN.1 integer tag\n 0x01, // Length of integer\n 0x00, // Version number\n\n 0x30, // ASN.1 sequence tag\n 0x05, // Length of sequence\n 0x06, // ASN.1 object identifier tag\n 0x03, // Length of object identifier\n // Edwards curve algorithms identifier https://oid-rep.orange-labs.fr/get/1.3.101.112\n 0x2b, // iso(1) / identified-organization(3) (The first node is multiplied by the decimal 40 and the result is added to the value of the second node)\n 0x65, // thawte(101)\n // Ed25519 identifier\n 0x70, // id-Ed25519(112)\n\n /**\n * Private key payload\n */\n 0x04, // ASN.1 octet string tag\n 0x22, // String length (34 more bytes)\n\n // Private key bytes as octet string\n 0x04, // ASN.1 octet string tag\n 0x20, // String length (32 bytes)\n ];\n\nfunction bufferSourceToUint8Array(data: BufferSource): Uint8Array {\n return data instanceof Uint8Array ? data : new Uint8Array(ArrayBuffer.isView(data) ? data.buffer : data);\n}\n\nlet storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT: WeakMap<CryptoKey, Uint8Array> | undefined;\n\n// Map of public key bytes. These are the result of calling `getPublicKey`\nlet publicKeyBytesStore: WeakMap<CryptoKey, Uint8Array> | undefined;\n\nfunction createKeyPairFromBytes(\n bytes: Uint8Array,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKeyPair {\n const keyPair = createKeyPair_INTERNAL_ONLY_DO_NOT_EXPORT(extractable, keyUsages);\n const cache = (storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= new WeakMap());\n cache.set(keyPair.privateKey, bytes);\n cache.set(keyPair.publicKey, bytes);\n return keyPair;\n}\n\nfunction createKeyPair_INTERNAL_ONLY_DO_NOT_EXPORT(\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKeyPair {\n if (keyUsages.length === 0) {\n throw new DOMException('Usages cannot be empty when creating a key.', 'SyntaxError');\n }\n if (keyUsages.some(usage => PROHIBITED_KEY_USAGES.has(usage))) {\n throw new DOMException('Unsupported key usage for an Ed25519 key.', 'SyntaxError');\n }\n const base = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n };\n const privateKey = {\n ...base,\n extractable,\n type: 'private',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'sign')) as KeyUsage[],\n } as CryptoKey;\n const publicKey = {\n ...base,\n extractable: true,\n type: 'public',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'verify')) as KeyUsage[],\n } as CryptoKey;\n return Object.freeze({\n privateKey: Object.freeze(privateKey),\n publicKey: Object.freeze(publicKey),\n });\n}\n\nfunction getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key: CryptoKey): Uint8Array {\n const secretKeyBytes = storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT?.get(key);\n if (secretKeyBytes === undefined) {\n throw new Error('Could not find secret key material associated with this `CryptoKey`');\n }\n return secretKeyBytes;\n}\n\nasync function getPublicKeyBytes(key: CryptoKey): Promise<Uint8Array> {\n // Try to find the key in the public key store first\n const publicKeyStore = (publicKeyBytesStore ||= new WeakMap());\n const fromPublicStore = publicKeyStore.get(key);\n if (fromPublicStore) return fromPublicStore;\n\n // If not available, get the key from the secrets store instead\n const publicKeyBytes = await getPublicKeyAsync(getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key));\n\n // Store the public key bytes in the public key store for next time\n publicKeyStore.set(key, publicKeyBytes);\n return publicKeyBytes;\n}\n\nfunction base64UrlEncode(bytes: Uint8Array): string {\n return btoa(Array.from(bytes, b => String.fromCharCode(b)).join(''))\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+$/, '');\n}\n\nfunction base64UrlDecode(value: string): Uint8Array {\n const m = value.length % 4;\n const base64Value = value\n .replace(/-/g, '+')\n .replace(/_/g, '/')\n .padEnd(value.length + (m === 0 ? 0 : 4 - m), '=');\n return Uint8Array.from(atob(base64Value), c => c.charCodeAt(0));\n}\n\nexport async function exportKeyPolyfill(format: 'jwk', key: CryptoKey): Promise<JsonWebKey>;\nexport async function exportKeyPolyfill(format: KeyFormat, key: CryptoKey): Promise<ArrayBuffer>;\nexport async function exportKeyPolyfill(format: KeyFormat, key: CryptoKey): Promise<ArrayBuffer | JsonWebKey> {\n if (key.extractable === false) {\n throw new DOMException('key is not extractable', 'InvalidAccessException');\n }\n switch (format) {\n case 'raw': {\n if (key.type !== 'public') {\n throw new DOMException(`Unable to export a raw Ed25519 ${key.type} key`, 'InvalidAccessError');\n }\n const publicKeyBytes = await getPublicKeyBytes(key);\n return publicKeyBytes.buffer as ArrayBuffer;\n }\n case 'pkcs8': {\n if (key.type !== 'private') {\n throw new DOMException(`Unable to export a pkcs8 Ed25519 ${key.type} key`, 'InvalidAccessError');\n }\n const secretKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);\n const result = new Uint8Array(ED25519_PKCS8_HEADER.length + secretKeyBytes.length);\n result.set(ED25519_PKCS8_HEADER, 0);\n result.set(secretKeyBytes, ED25519_PKCS8_HEADER.length);\n return result.buffer;\n }\n case 'jwk': {\n const publicKeyBytes = await getPublicKeyBytes(key);\n const base = {\n crv /* curve */: 'Ed25519',\n ext /* extractable */: key.extractable,\n key_ops /* key operations */: key.usages,\n kty /* key type */: 'OKP' /* octet key pair */,\n x /* public key x-coordinate (base64-URL encoded) */: base64UrlEncode(publicKeyBytes),\n };\n if (key.type === 'private') {\n const secretKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);\n return Object.freeze({\n ...base,\n d /* private key (base64-URL encoded) */: base64UrlEncode(secretKeyBytes),\n });\n }\n return Object.freeze({ ...base });\n }\n default:\n throw new Error(`Exporting polyfilled Ed25519 keys in the \"${format}\" format is unimplemented`);\n }\n}\n\n/**\n * This function generates a key pair and stores the secret bytes associated with it in a\n * module-private cache. Instead of vending the actual secret bytes, it returns a `CryptoKeyPair`\n * that you can use with other methods in this package to produce signatures and derive public keys\n * associated with the secret.\n */\nexport function generateKeyPolyfill(extractable: boolean, keyUsages: readonly KeyUsage[]): CryptoKeyPair {\n const privateKeyBytes = utils.randomSecretKey();\n const keyPair = createKeyPairFromBytes(privateKeyBytes, extractable, keyUsages);\n return keyPair;\n}\n\nexport function isPolyfilledKey(key: CryptoKey): boolean {\n return !!storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT?.has(key) || !!publicKeyBytesStore?.has(key);\n}\n\nexport async function signPolyfill(key: CryptoKey, data: BufferSource): Promise<ArrayBuffer> {\n if (key.type !== 'private' || !key.usages.includes('sign')) {\n throw new DOMException('Unable to use this key to sign', 'InvalidAccessError');\n }\n const privateKeyBytes = getSecretKeyBytes_INTERNAL_ONLY_DO_NOT_EXPORT(key);\n const payload = bufferSourceToUint8Array(data);\n const signature = await signAsync(payload, privateKeyBytes);\n return signature.buffer as ArrayBuffer;\n}\n\nexport async function verifyPolyfill(key: CryptoKey, signature: BufferSource, data: BufferSource): Promise<boolean> {\n if (key.type !== 'public' || !key.usages.includes('verify')) {\n throw new DOMException('Unable to use this key to verify', 'InvalidAccessError');\n }\n const publicKeyBytes = await getPublicKeyBytes(key);\n try {\n return await verifyAsync(bufferSourceToUint8Array(signature), bufferSourceToUint8Array(data), publicKeyBytes);\n } catch {\n return false;\n }\n}\n\nfunction assertValidKeyUsages(keyUsages: readonly KeyUsage[], type: 'private' | 'public') {\n const prohibitedKeyUses = new Set<KeyUsage>([\n ...((type === 'private' ? ['verify'] : ['sign']) as KeyUsage[]),\n ...PROHIBITED_KEY_USAGES,\n ]);\n if (keyUsages.some(usage => prohibitedKeyUses.has(usage))) {\n throw new DOMException('Unsupported key usage for a Ed25519 key', 'SyntaxError');\n }\n}\n\nexport function importKeyPolyfill(\n format: 'jwk',\n keyData: JsonWebKey,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKey;\nexport function importKeyPolyfill(\n format: Exclude<KeyFormat, 'jwk'>,\n keyData: BufferSource,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKey;\nexport function importKeyPolyfill(\n format: KeyFormat,\n keyData: BufferSource | JsonWebKey,\n extractable: boolean,\n keyUsages: readonly KeyUsage[],\n): CryptoKey {\n if (format === 'raw') {\n const bytes = bufferSourceToUint8Array(keyData as BufferSource);\n assertValidKeyUsages(keyUsages, 'public');\n if (bytes.length !== 32) {\n throw new DOMException('Ed25519 raw keys must be exactly 32-bytes', 'DataError');\n }\n const publicKey = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n extractable,\n type: 'public',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'verify')) as KeyUsage[],\n } as CryptoKey;\n\n const cache = (publicKeyBytesStore ||= new WeakMap());\n cache.set(publicKey, bytes);\n\n return publicKey;\n }\n\n if (format === 'pkcs8') {\n const bytes = bufferSourceToUint8Array(keyData as BufferSource);\n assertValidKeyUsages(keyUsages, 'private');\n // 48 bytes: 16-byte PKCS8 header + 32 byte secret key\n if (bytes.length !== 48) {\n throw new DOMException('Invalid keyData', 'DataError');\n }\n // Must start with exactly the Ed25519 pkcs8 header\n const header = bytes.slice(0, 16);\n if (!header.every((val, i) => val === ED25519_PKCS8_HEADER[i])) {\n throw new DOMException('Invalid keyData', 'DataError');\n }\n const secretKeyBytes = bytes.slice(16);\n\n const privateKey = {\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n extractable,\n type: 'private',\n usages: Object.freeze(keyUsages.filter(usage => usage === 'sign')) as KeyUsage[],\n } as CryptoKey;\n\n const cache = (storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= new WeakMap());\n cache.set(privateKey, secretKeyBytes);\n\n return privateKey;\n }\n\n if (format === 'jwk') {\n const jwk = keyData as JsonWebKey;\n const type = 'd' in jwk ? 'private' : 'public';\n assertValidKeyUsages(keyUsages, type);\n const keyOps = new Set(jwk.key_ops ?? []);\n const sameKeyUsages = keyUsages.length === keyOps.size && [...keyUsages].every(x => keyOps.has(x));\n if (jwk.kty !== 'OKP' || jwk.crv !== 'Ed25519' || jwk.ext !== extractable || !sameKeyUsages) {\n throw new DOMException('Invalid Ed25519 JWK', 'DataError');\n }\n if (type === 'public' && !jwk.x) {\n throw new DOMException('Ed25519 JWK is missing public key coordinates', 'DataError');\n }\n if (type === 'private' && !jwk.d) {\n throw new DOMException('Ed25519 JWK is missing private key coordinates', 'DataError');\n }\n const usageToKeep = type === 'public' ? 'verify' : 'sign';\n const key = Object.freeze({\n [Symbol.toStringTag]: 'CryptoKey',\n algorithm: Object.freeze({ name: 'Ed25519' }),\n extractable,\n type,\n usages: Object.freeze(keyUsages.filter(usage => usage === usageToKeep)) as KeyUsage[],\n }) as CryptoKey;\n\n if (type === 'public') {\n const cache = (publicKeyBytesStore ||= new WeakMap());\n cache.set(key, base64UrlDecode(jwk.x!));\n } else {\n const cache = (storageKeyBySecretKey_INTERNAL_ONLY_DO_NOT_EXPORT ||= new WeakMap());\n cache.set(key, base64UrlDecode(jwk.d!));\n }\n\n return key;\n }\n\n throw new Error(`Importing Ed25519 keys in the \"${format}\" format is unimplemented`);\n}\n","import cryptoImpl from '@solana/crypto-impl';\n\nimport {\n exportKeyPolyfill,\n generateKeyPolyfill,\n importKeyPolyfill,\n isPolyfilledKey,\n signPolyfill,\n verifyPolyfill,\n} from './secrets';\n\nfunction isAlgorithmEd25519(putativeEd25519Algorithm: AlgorithmIdentifier): boolean {\n const name =\n typeof putativeEd25519Algorithm === 'string' ? putativeEd25519Algorithm : putativeEd25519Algorithm.name;\n return name.localeCompare('Ed25519', 'en-US', { sensitivity: 'base' }) === 0;\n}\n\n/**\n * Polyfills methods on `globalThis.SubtleCrypto` to add support for the Ed25519 algorithm.\n *\n * @example\n * ```ts\n * import { install } from '@solana/webcrypto-ed25519-polyfill';\n *\n * // Calling this will shim methods on `SubtleCrypto`, adding Ed25519 support.\n * install();\n *\n * // Now you can do this, in environments that do not otherwise support Ed25519.\n * const keyPair = await crypto.subtle.generateKey({ name: 'Ed25519' }, false, ['sign']);\n * const publicKeyBytes = await crypto.subtle.exportKey('raw', keyPair.publicKey);\n * const data = new Uint8Array([1, 2, 3]);\n * const signature = await crypto.subtle.sign({ name: 'Ed25519' }, keyPair.privateKey, data);\n * if (await crypto.subtle.verify({ name: 'Ed25519' }, keyPair.publicKey, signature, data)) {\n * console.log('Data was signed using the private key associated with this public key');\n * } else {\n * throw new Error('Signature verification error');\n * }\n * ```\n */\nexport function install() {\n if (__NODEJS__) {\n /**\n * Node only sets the `crypto` global variable when run with `--experimental-global-webcrypto`.\n * Let's set it unconditionally here.\n */\n globalThis.crypto ||= cryptoImpl;\n }\n\n if (!__BROWSER__ || globalThis.isSecureContext) {\n /**\n * Create `crypto.subtle` if it doesn't exist.\n */\n const originalCryptoObject = (globalThis.crypto ||= {} as Crypto);\n const originalSubtleCrypto = ((originalCryptoObject as Crypto & { subtle: SubtleCrypto }).subtle ||=\n {} as SubtleCrypto);\n\n /**\n * Override `SubtleCrypto#exportKey`\n */\n const originalExportKey = originalSubtleCrypto.exportKey as SubtleCrypto['exportKey'] | undefined;\n originalSubtleCrypto.exportKey = (async (...args: Parameters<SubtleCrypto['exportKey']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n return await exportKeyPolyfill(...args);\n } else if (originalExportKey) {\n return await originalExportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `exportKey` function exists to handle this call');\n }\n }) as SubtleCrypto['exportKey'];\n\n /**\n * Override `SubtleCrypto#generateKey`\n */\n const originalGenerateKey = originalSubtleCrypto.generateKey as SubtleCrypto['generateKey'] | undefined;\n let originalGenerateKeySupportsEd25519: Promise<boolean> | boolean | undefined;\n originalSubtleCrypto.generateKey = (async (...args: Parameters<SubtleCrypto['generateKey']>) => {\n const [algorithm] = args;\n if (!isAlgorithmEd25519(algorithm)) {\n if (originalGenerateKey) {\n return await originalGenerateKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `generateKey` function exists to handle this call');\n }\n }\n let optimisticallyGeneratedKeyPair;\n if (originalGenerateKeySupportsEd25519 === undefined) {\n originalGenerateKeySupportsEd25519 = new Promise(resolve => {\n if (!originalGenerateKey) {\n resolve((originalGenerateKeySupportsEd25519 = false));\n return;\n }\n originalGenerateKey\n .apply(originalSubtleCrypto, args)\n .then(keyPair => {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n '`@solana/webcrypto-ed25519-polyfill` was installed in an ' +\n 'environment that supports Ed25519 key manipulation ' +\n 'natively. Falling back to the native implementation. ' +\n 'Consider installing this polyfill only in environments where ' +\n 'Ed25519 is not supported.',\n );\n }\n if (originalSubtleCrypto.generateKey !== originalGenerateKey) {\n originalSubtleCrypto.generateKey = originalGenerateKey;\n }\n optimisticallyGeneratedKeyPair = keyPair;\n resolve((originalGenerateKeySupportsEd25519 = true));\n })\n .catch(() => {\n resolve((originalGenerateKeySupportsEd25519 = false));\n });\n });\n }\n if (\n typeof originalGenerateKeySupportsEd25519 === 'boolean'\n ? originalGenerateKeySupportsEd25519\n : await originalGenerateKeySupportsEd25519\n ) {\n if (optimisticallyGeneratedKeyPair) {\n return optimisticallyGeneratedKeyPair;\n } else if (originalGenerateKey) {\n return await originalGenerateKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `generateKey` function exists to handle this call');\n }\n } else {\n const [_, extractable, keyUsages] = args;\n return generateKeyPolyfill(extractable, keyUsages);\n }\n }) as SubtleCrypto['generateKey'];\n\n /**\n * Override `SubtleCrypto#sign`\n */\n const originalSign = originalSubtleCrypto.sign as SubtleCrypto['sign'] | undefined;\n originalSubtleCrypto.sign = (async (...args: Parameters<SubtleCrypto['sign']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n const [_, ...rest] = args;\n return await signPolyfill(...rest);\n } else if (originalSign) {\n return await originalSign.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `sign` function exists to handle this call');\n }\n }) as SubtleCrypto['sign'];\n\n /**\n * Override `SubtleCrypto#verify`\n */\n const originalVerify = originalSubtleCrypto.verify as SubtleCrypto['verify'] | undefined;\n originalSubtleCrypto.verify = (async (...args: Parameters<SubtleCrypto['verify']>) => {\n const [_, key] = args;\n if (isPolyfilledKey(key)) {\n const [_, ...rest] = args;\n return await verifyPolyfill(...rest);\n } else if (originalVerify) {\n return await originalVerify.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `verify` function exists to handle this call');\n }\n }) as SubtleCrypto['verify'];\n\n /**\n * Override `SubtleCrypto#importKey`\n */\n const originalImportKey = originalSubtleCrypto.importKey as SubtleCrypto['importKey'] | undefined;\n let originalImportKeySupportsEd25519: Promise<boolean> | boolean | undefined;\n originalSubtleCrypto.importKey = (async (...args: Parameters<SubtleCrypto['importKey']>) => {\n const [format, keyData, algorithm] = args;\n if (!isAlgorithmEd25519(algorithm)) {\n if (originalImportKey) {\n return await originalImportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `importKey` function exists to handle this call');\n }\n }\n let optimisticallyImportedKey;\n if (originalImportKeySupportsEd25519 === undefined) {\n originalImportKeySupportsEd25519 = new Promise(resolve => {\n if (!originalImportKey) {\n resolve((originalImportKeySupportsEd25519 = false));\n return;\n }\n originalImportKey\n .apply(originalSubtleCrypto, args)\n .then(key => {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n '`@solana/webcrypto-ed25519-polyfill` was included in an ' +\n 'environment that supports Ed25519 key manipulation ' +\n 'natively. Falling back to the native implementation. ' +\n 'Consider including this polyfill only in environments where ' +\n 'Ed25519 is not supported.',\n );\n }\n if (originalSubtleCrypto.importKey !== originalImportKey) {\n originalSubtleCrypto.importKey = originalImportKey;\n }\n optimisticallyImportedKey = key;\n resolve((originalImportKeySupportsEd25519 = true));\n })\n .catch(() => {\n resolve((originalImportKeySupportsEd25519 = false));\n });\n });\n }\n if (\n typeof originalImportKey === 'boolean'\n ? originalImportKeySupportsEd25519\n : await originalImportKeySupportsEd25519\n ) {\n if (optimisticallyImportedKey) {\n return optimisticallyImportedKey;\n } else if (originalImportKey) {\n return await originalImportKey.apply(originalSubtleCrypto, args);\n } else {\n throw new TypeError('No native `importKey` function exists to handle this call');\n }\n } else {\n const [_format, _keyData, _algorithm, extractable, keyUsages] = args;\n return importKeyPolyfill(format, keyData, extractable, keyUsages);\n }\n }) as SubtleCrypto['importKey'];\n }\n}\n"]}
|
package/dist/index.node.cjs
CHANGED
|
@@ -787,7 +787,7 @@ function install() {
|
|
|
787
787
|
const originalCryptoObject = globalThis.crypto ||= {};
|
|
788
788
|
const originalSubtleCrypto = originalCryptoObject.subtle ||= {};
|
|
789
789
|
const originalExportKey = originalSubtleCrypto.exportKey;
|
|
790
|
-
originalSubtleCrypto.exportKey = async (...args) => {
|
|
790
|
+
originalSubtleCrypto.exportKey = (async (...args) => {
|
|
791
791
|
const [_, key] = args;
|
|
792
792
|
if (isPolyfilledKey(key)) {
|
|
793
793
|
return await exportKeyPolyfill(...args);
|
|
@@ -796,10 +796,10 @@ function install() {
|
|
|
796
796
|
} else {
|
|
797
797
|
throw new TypeError("No native `exportKey` function exists to handle this call");
|
|
798
798
|
}
|
|
799
|
-
};
|
|
799
|
+
});
|
|
800
800
|
const originalGenerateKey = originalSubtleCrypto.generateKey;
|
|
801
801
|
let originalGenerateKeySupportsEd25519;
|
|
802
|
-
originalSubtleCrypto.generateKey = async (...args) => {
|
|
802
|
+
originalSubtleCrypto.generateKey = (async (...args) => {
|
|
803
803
|
const [algorithm] = args;
|
|
804
804
|
if (!isAlgorithmEd25519(algorithm)) {
|
|
805
805
|
if (originalGenerateKey) {
|
|
@@ -843,9 +843,9 @@ function install() {
|
|
|
843
843
|
const [_, extractable, keyUsages] = args;
|
|
844
844
|
return generateKeyPolyfill(extractable, keyUsages);
|
|
845
845
|
}
|
|
846
|
-
};
|
|
846
|
+
});
|
|
847
847
|
const originalSign = originalSubtleCrypto.sign;
|
|
848
|
-
originalSubtleCrypto.sign = async (...args) => {
|
|
848
|
+
originalSubtleCrypto.sign = (async (...args) => {
|
|
849
849
|
const [_, key] = args;
|
|
850
850
|
if (isPolyfilledKey(key)) {
|
|
851
851
|
const [_2, ...rest] = args;
|
|
@@ -855,9 +855,9 @@ function install() {
|
|
|
855
855
|
} else {
|
|
856
856
|
throw new TypeError("No native `sign` function exists to handle this call");
|
|
857
857
|
}
|
|
858
|
-
};
|
|
858
|
+
});
|
|
859
859
|
const originalVerify = originalSubtleCrypto.verify;
|
|
860
|
-
originalSubtleCrypto.verify = async (...args) => {
|
|
860
|
+
originalSubtleCrypto.verify = (async (...args) => {
|
|
861
861
|
const [_, key] = args;
|
|
862
862
|
if (isPolyfilledKey(key)) {
|
|
863
863
|
const [_2, ...rest] = args;
|
|
@@ -867,10 +867,10 @@ function install() {
|
|
|
867
867
|
} else {
|
|
868
868
|
throw new TypeError("No native `verify` function exists to handle this call");
|
|
869
869
|
}
|
|
870
|
-
};
|
|
870
|
+
});
|
|
871
871
|
const originalImportKey = originalSubtleCrypto.importKey;
|
|
872
872
|
let originalImportKeySupportsEd25519;
|
|
873
|
-
originalSubtleCrypto.importKey = async (...args) => {
|
|
873
|
+
originalSubtleCrypto.importKey = (async (...args) => {
|
|
874
874
|
const [format, keyData, algorithm] = args;
|
|
875
875
|
if (!isAlgorithmEd25519(algorithm)) {
|
|
876
876
|
if (originalImportKey) {
|
|
@@ -914,7 +914,7 @@ function install() {
|
|
|
914
914
|
const [_format, _keyData, _algorithm, extractable, keyUsages] = args;
|
|
915
915
|
return importKeyPolyfill(format, keyData, extractable, keyUsages);
|
|
916
916
|
}
|
|
917
|
-
};
|
|
917
|
+
});
|
|
918
918
|
}
|
|
919
919
|
}
|
|
920
920
|
/*! Bundled license information:
|