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") }}, }