summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/hex.go12
-rw-r--r--lib/xor.go30
2 files changed, 42 insertions, 0 deletions
diff --git a/lib/hex.go b/lib/hex.go
index 6fe7e6a..5b1741f 100644
--- a/lib/hex.go
+++ b/lib/hex.go
@@ -53,3 +53,15 @@ func ByteToHexStr(b byte) string {
return s
}
+
+func BytesToHexStr(bs []byte) string {
+ hs := ""
+ if len(bs) < 1 {
+ return hs
+ }
+
+ for i := 0; i < len(bs); i++ {
+ hs += ByteToHexStr(bs[i])
+ }
+ return hs
+}
diff --git a/lib/xor.go b/lib/xor.go
index ae2bd12..0d1f3d7 100644
--- a/lib/xor.go
+++ b/lib/xor.go
@@ -21,3 +21,33 @@ func FixedXOR(a, b string) string {
}
return cs
}
+
+// Both 'data' and 'key' need to be plain ascii string.
+func RepeatingXOR(data, key string) string {
+ xs := ""
+ if len(data) < 1 || len(key) < 1 {
+ return xs
+ }
+
+ // data in bytes
+ db := []byte(data)
+
+ // key in bytes
+ dk := []byte(key)
+
+ lk := len(key)
+ for i, ki := 0, 0; i < len(db); i++ {
+ if ki == lk {
+ ki = 0
+ }
+
+ // xor a byte
+ eb := db[i] ^ dk[ki]
+
+ // append to result
+ xs += string(eb)
+
+ ki += 1
+ }
+ return xs
+}