diff --git a/Sources/Web3Core/KeystoreManager/BIP32HDNode.swift b/Sources/Web3Core/KeystoreManager/BIP32HDNode.swift index ab1d67295..661cbb69c 100644 --- a/Sources/Web3Core/KeystoreManager/BIP32HDNode.swift +++ b/Sources/Web3Core/KeystoreManager/BIP32HDNode.swift @@ -84,7 +84,7 @@ public class HDNode { } depth = data[4..<5].bytes[0] parentFingerprint = data[5..<9] - childNumber = data[9..<13].bytes.withUnsafeBytes { $0.load(as: UInt32.self) } + childNumber = Array(data.dropFirst(9).prefix(4)).withUnsafeBytes { $0.load(as: UInt32.self) } chaincode = data[13..<45] if serializePrivate { privateKey = data[46..<78] diff --git a/Sources/Web3Core/Utility/Utilities.swift b/Sources/Web3Core/Utility/Utilities.swift index e2ba762be..5cd8c1093 100644 --- a/Sources/Web3Core/Utility/Utilities.swift +++ b/Sources/Web3Core/Utility/Utilities.swift @@ -239,8 +239,8 @@ public struct Utilities { /// Takes a hash of some message. What message is hashed should be checked by user separately. public static func hashECRecover(hash: Data, signature: Data) -> EthereumAddress? { if signature.count != 65 { return nil } - let rData = signature[0..<32].bytes - let sData = signature[32..<64].bytes + let rData: [UInt8] = Array(signature.prefix(32)) + let sData: [UInt8] = Array(signature.dropFirst(32).prefix(32)) var vData = signature[64] if vData >= 27 && vData <= 30 { vData -= 27 @@ -274,11 +274,11 @@ public struct Utilities { /// Unmarshals a 65 byte recoverable EC signature into internal structure. static func unmarshalSignature(signatureData: Data) -> SECP256K1.UnmarshaledSignature? { - if signatureData.count != 65 { return nil } - let bytes = signatureData.bytes - let r = Array(bytes[0..<32]) - let s = Array(bytes[32..<64]) - return SECP256K1.UnmarshaledSignature(v: bytes[64], r: Data(r), s: Data(s)) + guard signatureData.count == 65 else { return nil } + let rSlice = signatureData.prefix(32) + let sSlice = signatureData.dropFirst(32).prefix(32) + let v = signatureData[64] + return SECP256K1.UnmarshaledSignature(v: v, r: Data(rSlice), s: Data(sSlice)) } /// Marshals the V, R and S signature parameters into a 65 byte recoverable EC signature. diff --git a/Sources/web3swift/HookedFunctions/Web3+BrowserFunctions.swift b/Sources/web3swift/HookedFunctions/Web3+BrowserFunctions.swift index c903a6af4..c17a8c891 100755 --- a/Sources/web3swift/HookedFunctions/Web3+BrowserFunctions.swift +++ b/Sources/web3swift/HookedFunctions/Web3+BrowserFunctions.swift @@ -53,8 +53,8 @@ extension Web3.BrowserFunctions { public func personalECRecover(_ personalMessage: Data, signature: Data) -> String? { if signature.count != 65 { return nil } - let rData = signature[0..<32].bytes - let sData = signature[32..<64].bytes + let rData = Array(signature.prefix(32)) + let sData = Array(signature.dropFirst(32).prefix(32)) var vData = signature[64] if vData >= 27 && vData <= 30 { vData -= 27