added get loop and new key type xor

This commit is contained in:
ston1th 2023-03-22 22:52:19 +01:00
commit 9e68b46346
8 changed files with 122 additions and 24 deletions

View file

@ -13,12 +13,15 @@ type Type int
const (
Plain Type = iota
Shamir
Xor
)
func (t Type) String() string {
switch t {
case Shamir:
return "shamir"
case Xor:
return "xor"
}
return "plain"
}
@ -26,14 +29,27 @@ func (t Type) String() string {
func (t Type) Decode(src []byte) ([]byte, error) {
switch t {
case Shamir:
plen := len(src) / 2
part1 := src[0:plen]
part2 := src[plen:]
return shamir.Combine([][]byte{part1, part2})
p1, p2 := split(src)
return shamir.Combine([][]byte{p1, p2})
case Xor:
return xor(src), nil
}
return src, nil
}
func split(src []byte) (p1, p2 []byte) {
plen := len(src) / 2
return src[0:plen], src[plen:]
}
func xor(src []byte) []byte {
p1, p2 := split(src)
for i := 0; i < len(p1); i++ {
p1[i] ^= p2[i]
}
return p1
}
func (t Type) Encode(src []byte) ([]byte, error) {
switch t {
case Shamir:
@ -50,6 +66,8 @@ func TypeFromString(t string) Type {
switch t {
case "shamir":
return Shamir
case "xor":
return Xor
}
return Plain
}