spb/os-vault Public
Self-custody, multi-chain crypto wallet for macOS. One recovery phrase, six chain families, zero API keys — nothing leaves your Mac.
Swift 96%
Shell 3.4%
Makefile 0.6%
1import Foundation23public extension Data {4 var decodedLength: Int {5 var len: UInt8 = 06 var size: UInt8 = 07 var bytes = self8 while true {9 guard let elem = bytes.first else { break }10 bytes = bytes.dropFirst()11 len |= (elem & 0x7F) << (size * 7)12 size += 113 if elem & 0x80 == 0 {14 break15 }16 }17 return Int(len)18 }1920 mutating func decodeLength() -> Int {21 var len: UInt8 = 022 var size: UInt8 = 023 while true {24 guard let elem = bytes.first else { break }25 _ = popFirst()26 len |= (elem & 0x7F) << (size * 7)27 size += 128 if elem & 0x80 == 0 {29 break30 }31 }32 return Int(len)33 }3435 static func encodeLength(_ len: Int) -> Data {36 encodeLength(UInt(len))37 }3839 private static func encodeLength(_ len: UInt) -> Data {40 var rem_len = len41 var bytes = Data()42 while true {43 var elem = rem_len & 0x7F44 rem_len = rem_len >> 745 if rem_len == 0 {46 bytes.append(UInt8(elem))47 break48 } else {49 elem = elem | 0x8050 bytes.append(UInt8(elem))51 }52 }53 return bytes54 }55}5657public extension Encodable {58 var jsonString: String? {59 guard let data = try? JSONEncoder().encode(self) else { return nil }60 return String(data: data, encoding: .utf8)61 }62}63