35 lines
1.2 KiB
Go
35 lines
1.2 KiB
Go
package ots
|
|
|
|
import "crypto/sha256"
|
|
|
|
type Operation struct {
|
|
Name string
|
|
Tag byte
|
|
Binary bool // it's an operation that takes one argument, otherwise takes none
|
|
Apply func(curr []byte, arg []byte) []byte
|
|
}
|
|
|
|
var Tags = map[byte]*Operation{
|
|
0xf0: {"append", 0xf0, true, func(curr []byte, arg []byte) []byte {
|
|
result := make([]byte, len(curr)+len(arg))
|
|
copy(result[0:], curr)
|
|
copy(result[len(curr):], arg)
|
|
return result
|
|
}},
|
|
0xf1: {"prepend", 0xf1, true, func(curr []byte, arg []byte) []byte {
|
|
result := make([]byte, len(curr)+len(arg))
|
|
copy(result[0:], arg)
|
|
copy(result[len(arg):], curr)
|
|
return result
|
|
}},
|
|
0xf2: {"reverse", 0xf2, false, func(curr []byte, arg []byte) []byte { panic("reverse not implemented") }},
|
|
0xf3: {"hexlify", 0xf3, false, func(curr []byte, arg []byte) []byte { panic("hexlify not implemented") }},
|
|
0x02: {"sha1", 0x02, false, func(curr []byte, arg []byte) []byte { panic("sha1 not implemented") }},
|
|
0x03: {"ripemd160", 0x03, false, ripemd160},
|
|
0x08: {"sha256", 0x08, false, func(curr []byte, arg []byte) []byte {
|
|
v := sha256.Sum256(curr)
|
|
return v[:]
|
|
}},
|
|
0x67: {"keccak256", 0x67, false, func(curr []byte, arg []byte) []byte { panic("keccak256 not implemented") }},
|
|
}
|