@@ -69,7 +69,7 @@ public class HDNode {
6969 }
7070
7171 public init ? ( _ data: Data ) {
72- guard data. count == 82 else { return nil }
72+ guard data. count == 82 else { return nil }
7373 let header = data [ 0 ..< 4 ]
7474 var serializePrivate = false
7575 if header == HDNode . HDversion ( ) . privatePrefix {
@@ -81,30 +81,30 @@ public class HDNode {
8181 chaincode = data [ 13 ..< 45 ]
8282 if serializePrivate {
8383 privateKey = data [ 46 ..< 78 ]
84- guard let pubKey = Utilities . privateToPublic ( privateKey!, compressed: true ) else { return nil }
85- if pubKey [ 0 ] != 0x02 && pubKey [ 0 ] != 0x03 { return nil }
84+ guard let pubKey = Utilities . privateToPublic ( privateKey!, compressed: true ) else { return nil }
85+ if pubKey [ 0 ] != 0x02 && pubKey [ 0 ] != 0x03 { return nil }
8686 publicKey = pubKey
8787 } else {
8888 publicKey = data [ 45 ..< 78 ]
8989 }
9090 let hashedData = data [ 0 ..< 78 ] . sha256 ( ) . sha256 ( )
9191 let checksum = hashedData [ 0 ..< 4 ]
92- if checksum != data [ 78 ..< 82 ] { return nil }
92+ if checksum != data [ 78 ..< 82 ] { return nil }
9393 }
9494
9595 public init ? ( seed: Data ) {
96- guard seed. count >= 16 else { return nil }
96+ guard seed. count >= 16 else { return nil }
9797 let hmacKey = " Bitcoin seed " . data ( using: . ascii) !
9898 let hmac : Authenticator = HMAC ( key: hmacKey. bytes, variant: HMAC . Variant. sha2 ( . sha512) )
99- guard let entropy = try ? hmac. authenticate ( seed. bytes) else { return nil }
99+ guard let entropy = try ? hmac. authenticate ( seed. bytes) else { return nil }
100100 guard entropy. count == 64 else { return nil }
101101 let I_L = entropy [ 0 ..< 32 ]
102102 let I_R = entropy [ 32 ..< 64 ]
103103 chaincode = Data ( I_R)
104104 let privKeyCandidate = Data ( I_L)
105- guard SECP256K1 . verifyPrivateKey ( privateKey: privKeyCandidate) else { return nil }
106- guard let pubKeyCandidate = SECP256K1 . privateToPublic ( privateKey: privKeyCandidate, compressed: true ) else { return nil }
107- guard pubKeyCandidate. bytes [ 0 ] == 0x02 || pubKeyCandidate. bytes [ 0 ] == 0x03 else { return nil }
105+ guard SECP256K1 . verifyPrivateKey ( privateKey: privKeyCandidate) else { return nil }
106+ guard let pubKeyCandidate = SECP256K1 . privateToPublic ( privateKey: privKeyCandidate, compressed: true ) else { return nil }
107+ guard pubKeyCandidate. bytes [ 0 ] == 0x02 || pubKeyCandidate. bytes [ 0 ] == 0x03 else { return nil }
108108 publicKey = pubKeyCandidate
109109 privateKey = privKeyCandidate
110110 depth = 0x00
@@ -135,7 +135,7 @@ extension HDNode {
135135 inputForHMAC. append ( Data ( [ UInt8 ( 0x00 ) ] ) )
136136 inputForHMAC. append ( self . privateKey!)
137137 inputForHMAC. append ( trueIndex. serialize32 ( ) )
138- guard let ent = try ? hmac. authenticate ( inputForHMAC. bytes) else { return nil }
138+ guard let ent = try ? hmac. authenticate ( inputForHMAC. bytes) else { return nil }
139139 guard ent. count == 64 else { return nil }
140140 entropy = ent
141141 } else {
@@ -144,7 +144,7 @@ extension HDNode {
144144 var inputForHMAC = Data ( )
145145 inputForHMAC. append ( self . publicKey)
146146 inputForHMAC. append ( trueIndex. serialize32 ( ) )
147- guard let ent = try ? hmac. authenticate ( inputForHMAC. bytes) else { return nil }
147+ guard let ent = try ? hmac. authenticate ( inputForHMAC. bytes) else { return nil }
148148 guard ent. count == 64 else { return nil }
149149 entropy = ent
150150 }
@@ -165,11 +165,11 @@ extension HDNode {
165165 }
166166 return nil
167167 }
168- guard let privKeyCandidate = newPK. serialize ( ) . setLengthLeft ( 32 ) else { return nil }
169- guard SECP256K1 . verifyPrivateKey ( privateKey: privKeyCandidate) else { return nil }
170- guard let pubKeyCandidate = SECP256K1 . privateToPublic ( privateKey: privKeyCandidate, compressed: true ) else { return nil }
171- guard pubKeyCandidate. bytes [ 0 ] == 0x02 || pubKeyCandidate. bytes [ 0 ] == 0x03 else { return nil }
172- guard self . depth < UInt8 . max else { return nil }
168+ guard let privKeyCandidate = newPK. serialize ( ) . setLengthLeft ( 32 ) else { return nil }
169+ guard SECP256K1 . verifyPrivateKey ( privateKey: privKeyCandidate) else { return nil }
170+ guard let pubKeyCandidate = SECP256K1 . privateToPublic ( privateKey: privKeyCandidate, compressed: true ) else { return nil }
171+ guard pubKeyCandidate. bytes [ 0 ] == 0x02 || pubKeyCandidate. bytes [ 0 ] == 0x03 else { return nil }
172+ guard self . depth < UInt8 . max else { return nil }
173173 let newNode = HDNode ( )
174174 newNode. chaincode = cc
175175 newNode. depth = self . depth + 1
@@ -201,7 +201,7 @@ extension HDNode {
201201 var inputForHMAC = Data ( )
202202 inputForHMAC. append ( self . publicKey)
203203 inputForHMAC. append ( index. serialize32 ( ) )
204- guard let ent = try ? hmac. authenticate ( inputForHMAC. bytes) else { return nil }
204+ guard let ent = try ? hmac. authenticate ( inputForHMAC. bytes) else { return nil }
205205 guard ent. count == 64 else { return nil }
206206 entropy = ent
207207 }
@@ -215,13 +215,13 @@ extension HDNode {
215215 }
216216 return nil
217217 }
218- guard let tempKey = bn. serialize ( ) . setLengthLeft ( 32 ) else { return nil }
219- guard SECP256K1 . verifyPrivateKey ( privateKey: tempKey) else { return nil }
220- guard let pubKeyCandidate = SECP256K1 . privateToPublic ( privateKey: tempKey, compressed: true ) else { return nil }
221- guard pubKeyCandidate. bytes [ 0 ] == 0x02 || pubKeyCandidate. bytes [ 0 ] == 0x03 else { return nil }
222- guard let newPublicKey = SECP256K1 . combineSerializedPublicKeys ( keys: [ self . publicKey, pubKeyCandidate] , outputCompressed: true ) else { return nil }
223- guard newPublicKey. bytes [ 0 ] == 0x02 || newPublicKey. bytes [ 0 ] == 0x03 else { return nil }
224- guard self . depth < UInt8 . max else { return nil }
218+ guard let tempKey = bn. serialize ( ) . setLengthLeft ( 32 ) else { return nil }
219+ guard SECP256K1 . verifyPrivateKey ( privateKey: tempKey) else { return nil }
220+ guard let pubKeyCandidate = SECP256K1 . privateToPublic ( privateKey: tempKey, compressed: true ) else { return nil }
221+ guard pubKeyCandidate. bytes [ 0 ] == 0x02 || pubKeyCandidate. bytes [ 0 ] == 0x03 else { return nil }
222+ guard let newPublicKey = SECP256K1 . combineSerializedPublicKeys ( keys: [ self . publicKey, pubKeyCandidate] , outputCompressed: true ) else { return nil }
223+ guard newPublicKey. bytes [ 0 ] == 0x02 || newPublicKey. bytes [ 0 ] == 0x03 else { return nil }
224+ guard self . depth < UInt8 . max else { return nil }
225225 let newNode = HDNode ( )
226226 newNode. chaincode = cc
227227 newNode. depth = self . depth + 1
@@ -255,22 +255,22 @@ extension HDNode {
255255 if component. hasSuffix ( " ' " ) {
256256 hardened = true
257257 }
258- guard let index = UInt32 ( component. trimmingCharacters ( in: CharacterSet ( charactersIn: " ' " ) ) ) else { return nil }
259- guard let newNode = currentNode. derive ( index: index, derivePrivateKey: derivePrivateKey, hardened: hardened) else { return nil }
258+ guard let index = UInt32 ( component. trimmingCharacters ( in: CharacterSet ( charactersIn: " ' " ) ) ) else { return nil }
259+ guard let newNode = currentNode. derive ( index: index, derivePrivateKey: derivePrivateKey, hardened: hardened) else { return nil }
260260 currentNode = newNode
261261 }
262262 return currentNode
263263 }
264264
265265 public func serializeToString( serializePublic: Bool = true , version: HDversion = HDversion ( ) ) -> String ? {
266- guard let data = self . serialize ( serializePublic: serializePublic, version: version) else { return nil }
266+ guard let data = self . serialize ( serializePublic: serializePublic, version: version) else { return nil }
267267 let encoded = Base58 . base58FromBytes ( data. bytes)
268268 return encoded
269269 }
270270
271271 public func serialize( serializePublic: Bool = true , version: HDversion = HDversion ( ) ) -> Data ? {
272272 var data = Data ( )
273- if !serializePublic && !self . hasPrivate { return nil }
273+ if !serializePublic && !self . hasPrivate { return nil }
274274 if serializePublic {
275275 data. append ( version. publicPrefix)
276276 } else {
0 commit comments