@@ -59,7 +59,8 @@ var HDKey = ("object" === typeof module && exports) || {};
5959 const BUFFER_BE = false ;
6060 const COMPRESSED = true ;
6161
62- let crypto = require ( "crypto" ) ;
62+ //@ts -ignore
63+ let Crypto = window . crypto || require ( "crypto" ) ;
6364 let bs58check = require ( "bs58check" ) ;
6465
6566 let Utils = { } ;
@@ -88,24 +89,60 @@ var HDKey = ("object" === typeof module && exports) || {};
8889 } ;
8990
9091 /** @type {HDHasher } */
91- Utils . ripemd160sum = async function ( buf ) {
92+ Utils . ripemd160sum = async function ( bytes ) {
9293 let RIPEMD160 = require ( "ripemd160" ) ;
93- return new RIPEMD160 ( ) . update ( buf ) . digest ( ) ;
94+ let buf = Buffer . from ( bytes ) ;
95+ let hash = new RIPEMD160 ( ) . update ( buf ) . digest ( ) ;
96+ return new Uint8Array ( hash ) ;
9497 } ;
9598
9699 /** @type {HDHasher } */
97- Utils . sha256sum = async function ( buf ) {
98- return crypto . createHash ( "sha256" ) . update ( buf ) . digest ( ) ;
100+ Utils . sha256sum = async function ( bytes ) {
101+ if ( ! Crypto . subtle ) {
102+ let sha256 = Crypto . createHash ( "sha256" ) . update ( bytes ) . digest ( ) ;
103+ return new Uint8Array ( sha256 ) ;
104+ }
105+ let arrayBuffer = await Crypto . subtle . digest ( "SHA-256" , bytes ) ;
106+ let hashBytes = new Uint8Array ( arrayBuffer ) ;
107+ return hashBytes ;
99108 } ;
100109
101110 /** @type {HDHmac } */
102111 Utils . sha512hmac = async function ( entropy , data ) {
103- return crypto . createHmac ( "sha512" , entropy ) . update ( data ) . digest ( ) ;
112+ if ( ! Crypto . subtle ) {
113+ let buf = Crypto . createHmac ( "sha512" , entropy ) . update ( data ) . digest ( ) ;
114+ return new Uint8Array ( buf ) ;
115+ }
116+
117+ /** @type {"raw"|"pkcs8"|"spki" } */
118+ let format = "raw" ;
119+ let algo = {
120+ name : "HMAC" ,
121+ hash : "SHA-512" ,
122+ } ;
123+ let extractable = false ;
124+ /** @type {Array<KeyUsage> } */
125+ let keyUsages = [ "sign" ] ;
126+ let hmacKey = await Crypto . subtle . importKey (
127+ format ,
128+ entropy ,
129+ algo ,
130+ extractable ,
131+ keyUsages ,
132+ ) ;
133+ let sig = await Crypto . subtle . sign ( "HMAC" , hmacKey , data ) ;
134+
135+ return new Uint8Array ( sig ) ;
104136 } ;
105137
106138 /** @type {HDSecureErase } */
107139 Utils . secureErase = function ( buf ) {
108- crypto . randomBytes ( buf . length ) . copy ( buf ) ;
140+ if ( ! Crypto . getRandomValues ) {
141+ Crypto . randomBytes ( buf . length ) . copy ( buf ) ;
142+ return ;
143+ }
144+
145+ Crypto . getRandomValues ( buf ) ;
109146 } ;
110147
111148 /** @type {HDUtilSign } */
0 commit comments