Refactor Base32 encoder
This commit is contained in:
parent
7664bd83d9
commit
f79781d04d
|
@ -33,32 +33,16 @@ enum Base32 {
|
|||
|
||||
}
|
||||
|
||||
enum Base32Error: Error {
|
||||
case invalidCharacter
|
||||
}
|
||||
|
||||
extension Data {
|
||||
|
||||
/// Decode Crockford's Base32
|
||||
init?(base32Encoded base32String: String, using table: [UInt8] = Base32.crockfordsDecodingTable) {
|
||||
guard base32String.unicodeScalars.allSatisfy({ $0.isASCII }) else {
|
||||
return nil
|
||||
}
|
||||
|
||||
var base32String = base32String
|
||||
while let last = base32String.last, last == "=" {
|
||||
base32String.removeLast()
|
||||
}
|
||||
guard [0, 2, 4, 5, 7].contains(base32String.count % 8) else {
|
||||
return nil
|
||||
}
|
||||
|
||||
let dstlen = base32String.count * 5 / 8
|
||||
|
||||
var buffer = Data(count: dstlen)
|
||||
|
||||
let success: Bool = buffer.withUnsafeMutableBytes { (dst: UnsafeMutablePointer<UInt8>) in
|
||||
base32String.withCString(encodedAs: Unicode.ASCII.self) { (src) in
|
||||
let result: Data? = base32String.withCString(encodedAs: Unicode.ASCII.self) { (src) in
|
||||
func _strlen(_ str: UnsafePointer<UInt8>) -> Int {
|
||||
var str = str
|
||||
var i = 0
|
||||
|
@ -69,7 +53,16 @@ extension Data {
|
|||
return i
|
||||
}
|
||||
|
||||
var srcleft = _strlen(src)
|
||||
let srclen = _strlen(src)
|
||||
guard [0, 2, 4, 5, 7].contains(srclen % 8) else {
|
||||
return nil
|
||||
}
|
||||
|
||||
let dstlen = srclen * 5 / 8
|
||||
|
||||
var buffer = Data(count: dstlen)
|
||||
let success: Bool = buffer.withUnsafeMutableBytes { (dst: UnsafeMutablePointer<UInt8>) in
|
||||
var srcleft = srclen
|
||||
var srcp = src
|
||||
|
||||
var dstp = dst
|
||||
|
@ -112,12 +105,19 @@ extension Data {
|
|||
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
guard success else {
|
||||
return nil
|
||||
}
|
||||
|
||||
self = buffer
|
||||
return buffer
|
||||
}
|
||||
|
||||
guard let data = result else {
|
||||
return nil
|
||||
}
|
||||
|
||||
self = data
|
||||
}
|
||||
|
||||
/// Encode Crockford's Base32
|
||||
|
|
Loading…
Reference in New Issue