Initial project import
This commit is contained in:
commit
23f2d29e32
11957 files changed
+1754577
No files matched your search
@@ -0,0 +1,97 @@
|
||||
module bcrypt
|
||||
|
||||
const alphabet = './ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
|
||||
|
||||
fn char64(c u8) u8 {
|
||||
for i, ch in alphabet {
|
||||
if ch == c {
|
||||
return u8(i)
|
||||
}
|
||||
}
|
||||
return 255
|
||||
}
|
||||
|
||||
fn base64_decode(data string) []u8 {
|
||||
mut dest_index := 0
|
||||
mut result := []u8{}
|
||||
for src_index := 0; src_index < data.len - 1; src_index += 4 {
|
||||
c1 := char64(data[src_index])
|
||||
|
||||
if src_index + 1 >= data.len {
|
||||
break
|
||||
}
|
||||
|
||||
c2 := char64(data[src_index + 1])
|
||||
|
||||
// Invalid data */
|
||||
if c1 == 255 || c2 == 255 {
|
||||
break
|
||||
}
|
||||
|
||||
result << ((c1 << 2) | ((c2 & 0x30) >> 4))
|
||||
dest_index += 1
|
||||
|
||||
if src_index + 2 >= data.len || dest_index == 16 {
|
||||
break
|
||||
}
|
||||
|
||||
c3 := char64(data[src_index + 2])
|
||||
if c3 == 255 {
|
||||
break
|
||||
}
|
||||
|
||||
result << (((c2 & 0x0f) << 4) | ((c3 & 0x3c) >> 2))
|
||||
dest_index += 1
|
||||
|
||||
if src_index + 3 >= data.len || dest_index == 16 {
|
||||
break
|
||||
}
|
||||
|
||||
c4 := char64(data[src_index + 3])
|
||||
if c4 == 255 {
|
||||
break
|
||||
}
|
||||
|
||||
result << (((c3 & 0x03) << 6) | c4)
|
||||
dest_index += 1
|
||||
|
||||
if dest_index == 16 {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
fn base64_encode(data []u8) string {
|
||||
mut src_index := 0
|
||||
mut result := []u8{}
|
||||
for src_index < data.len {
|
||||
mut c1 := data[src_index]
|
||||
src_index += 1
|
||||
result << alphabet[c1 >> 2]
|
||||
c1 = (c1 & 0x03) << 4
|
||||
if src_index >= data.len {
|
||||
result << alphabet[c1]
|
||||
break
|
||||
}
|
||||
|
||||
mut c2 := data[src_index]
|
||||
src_index += 1
|
||||
c1 |= (c2 >> 4) & 0x0f
|
||||
result << alphabet[c1]
|
||||
c1 = (c2 & 0x0f) << 2
|
||||
if src_index >= data.len {
|
||||
result << alphabet[c1]
|
||||
break
|
||||
}
|
||||
|
||||
c2 = data[src_index]
|
||||
src_index += 1
|
||||
c1 |= (c2 >> 6) & 0x03
|
||||
result << alphabet[c1]
|
||||
result << alphabet[c2 & 0x3f]
|
||||
}
|
||||
|
||||
return result.bytestr()
|
||||
}
|
||||
Reference in new issue
Block a user