added get loop and new key type xor
This commit is contained in:
parent
8f350b4b02
commit
9e68b46346
8 changed files with 122 additions and 24 deletions
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue