[bin.xor] created bitwise XOR shorthand for Byte() and ByteArray()
This commit is contained in:
commit
1da9ede808
|
@ -0,0 +1,4 @@
|
|||
/bin
|
||||
/pkg
|
||||
/src/*
|
||||
!/src/git.xdrm.io/
|
|
@ -0,0 +1,67 @@
|
|||
package xor
|
||||
|
||||
import "math"
|
||||
|
||||
/* (1) bitwise XOR between bytes
|
||||
*
|
||||
* @_left<byte> Left operand
|
||||
* @_right<byte> Right operand
|
||||
*
|
||||
* @return out<byte> Bitwise XOR result between _left and _right
|
||||
*
|
||||
---------------------------------------------------------*/
|
||||
func Byte(_left byte, _right byte) byte {
|
||||
|
||||
return _left ^ _right;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* (2) bitwise XOR between Byte arrays
|
||||
*
|
||||
* @_left<byte[]> Left operand
|
||||
* @_right<byte[]> Right operand
|
||||
*
|
||||
* @return out<byte[]> Bitwise XOR result between _left and _right
|
||||
*
|
||||
* @@ NOTE @@
|
||||
* If an argument is smaller, it will be right-padded with null bytes (0x00)
|
||||
*
|
||||
---------------------------------------------------------*/
|
||||
func ByteArray(_left []byte, _right []byte) []byte {
|
||||
|
||||
/* (1) Process
|
||||
---------------------------------------------------------*/
|
||||
/* (1) Extract lengths */
|
||||
ll := len(_left)
|
||||
lr := len(_right)
|
||||
|
||||
/* (2) Get max length */
|
||||
l := int(math.Max(float64(ll), float64(lr)))
|
||||
|
||||
/* (3) Initialise 'out' */
|
||||
out := make([]byte, l, l)
|
||||
|
||||
/* (2) Process bitwise XOR */
|
||||
for i := 0 ; i < l ; i++ {
|
||||
|
||||
// 1. Out of range for _left
|
||||
if i >= ll {
|
||||
|
||||
out[i] = _right[i];
|
||||
|
||||
} else if i >= lr {
|
||||
|
||||
out[i] = _left[i];
|
||||
|
||||
} else {
|
||||
|
||||
out[i] = Byte(_left[i], _right[i])
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return out
|
||||
|
||||
}
|
Loading…
Reference in New Issue