mirror of
https://github.com/fluencelabs/tendermint
synced 2025-06-14 13:51:21 +00:00
Add crc16 support
This commit is contained in:
24
glide.lock
generated
24
glide.lock
generated
@ -1,5 +1,5 @@
|
|||||||
hash: 3bcee9fbccf29d21217b24b6a83ec51e1514f37b2ae5d8718cf6c5df80f4fb2c
|
hash: c0a2db1b80c6b1b8aab31c526ce43e22e49b23c893c78b8fdb8546aa2e7b7cc6
|
||||||
updated: 2017-06-19T17:16:58.037568333+02:00
|
updated: 2017-07-22T05:24:42.82932575-04:00
|
||||||
imports:
|
imports:
|
||||||
- name: github.com/bgentry/speakeasy
|
- name: github.com/bgentry/speakeasy
|
||||||
version: 4aabc24848ce5fd31929f7d1e4ea74d3709c14cd
|
version: 4aabc24848ce5fd31929f7d1e4ea74d3709c14cd
|
||||||
@ -38,11 +38,11 @@ imports:
|
|||||||
- name: github.com/gorilla/context
|
- name: github.com/gorilla/context
|
||||||
version: 08b5f424b9271eedf6f9f0ce86cb9396ed337a42
|
version: 08b5f424b9271eedf6f9f0ce86cb9396ed337a42
|
||||||
- name: github.com/gorilla/handlers
|
- name: github.com/gorilla/handlers
|
||||||
version: 3a5767ca75ece5f7f1440b1d16975247f8d8b221
|
version: a4043c62cc2329bacda331d33fc908ab11ef0ec3
|
||||||
- name: github.com/gorilla/mux
|
- name: github.com/gorilla/mux
|
||||||
version: 392c28fe23e1c45ddba891b0320b3b5df220beea
|
version: bcd8bc72b08df0f70df986b97f95590779502d31
|
||||||
- name: github.com/hashicorp/hcl
|
- name: github.com/hashicorp/hcl
|
||||||
version: a4b07c25de5ff55ad3b8936cea69a79a3d95a855
|
version: 392dba7d905ed5d04a5794ba89f558b27e2ba1ca
|
||||||
subpackages:
|
subpackages:
|
||||||
- hcl/ast
|
- hcl/ast
|
||||||
- hcl/parser
|
- hcl/parser
|
||||||
@ -52,6 +52,8 @@ imports:
|
|||||||
- json/parser
|
- json/parser
|
||||||
- json/scanner
|
- json/scanner
|
||||||
- json/token
|
- json/token
|
||||||
|
- name: github.com/howeyc/crc16
|
||||||
|
version: 58da63c846043d0bea709c8d47039df06577d6d9
|
||||||
- name: github.com/inconshreveable/mousetrap
|
- name: github.com/inconshreveable/mousetrap
|
||||||
version: 76626ae9c91c4f2a10f34cad8ce83ea42c93bb75
|
version: 76626ae9c91c4f2a10f34cad8ce83ea42c93bb75
|
||||||
- name: github.com/kr/logfmt
|
- name: github.com/kr/logfmt
|
||||||
@ -67,7 +69,7 @@ imports:
|
|||||||
- name: github.com/pelletier/go-toml
|
- name: github.com/pelletier/go-toml
|
||||||
version: 13d49d4606eb801b8f01ae542b4afc4c6ee3d84a
|
version: 13d49d4606eb801b8f01ae542b4afc4c6ee3d84a
|
||||||
- name: github.com/pkg/errors
|
- name: github.com/pkg/errors
|
||||||
version: ff09b135c25aae272398c51a07235b90a75aa4f0
|
version: 645ef00459ed84a119197bfb8d8205042c6df63d
|
||||||
- name: github.com/spf13/afero
|
- name: github.com/spf13/afero
|
||||||
version: 9be650865eab0c12963d8753212f4f9c66cdcf12
|
version: 9be650865eab0c12963d8753212f4f9c66cdcf12
|
||||||
subpackages:
|
subpackages:
|
||||||
@ -75,11 +77,11 @@ imports:
|
|||||||
- name: github.com/spf13/cast
|
- name: github.com/spf13/cast
|
||||||
version: acbeb36b902d72a7a4c18e8f3241075e7ab763e4
|
version: acbeb36b902d72a7a4c18e8f3241075e7ab763e4
|
||||||
- name: github.com/spf13/cobra
|
- name: github.com/spf13/cobra
|
||||||
version: db6b9a8b3f3f400c8ecb4a4d7d02245b8facad66
|
version: 4cdb38c072b86bf795d2c81de50784d9fdd6eb77
|
||||||
- name: github.com/spf13/jwalterweatherman
|
- name: github.com/spf13/jwalterweatherman
|
||||||
version: fa7ca7e836cf3a8bb4ebf799f472c12d7e903d66
|
version: 8f07c835e5cc1450c082fe3a439cf87b0cbb2d99
|
||||||
- name: github.com/spf13/pflag
|
- name: github.com/spf13/pflag
|
||||||
version: 80fe0fb4eba54167e2ccae1c6c950e72abf61b73
|
version: e57e3eeb33f795204c1ca35f56c44f83227c6e66
|
||||||
- name: github.com/spf13/viper
|
- name: github.com/spf13/viper
|
||||||
version: 0967fc9aceab2ce9da34061253ac10fb99bba5b2
|
version: 0967fc9aceab2ce9da34061253ac10fb99bba5b2
|
||||||
- name: github.com/tendermint/ed25519
|
- name: github.com/tendermint/ed25519
|
||||||
@ -93,7 +95,7 @@ imports:
|
|||||||
- data
|
- data
|
||||||
- data/base58
|
- data/base58
|
||||||
- name: github.com/tendermint/tmlibs
|
- name: github.com/tendermint/tmlibs
|
||||||
version: bd9d0d1637dadf1330e167189d5e5031aadcda6f
|
version: 2f6f3e6aa70bb19b70a6e73210273fa127041070
|
||||||
subpackages:
|
subpackages:
|
||||||
- cli
|
- cli
|
||||||
- common
|
- common
|
||||||
@ -111,7 +113,7 @@ imports:
|
|||||||
- ripemd160
|
- ripemd160
|
||||||
- salsa20/salsa
|
- salsa20/salsa
|
||||||
- name: golang.org/x/sys
|
- name: golang.org/x/sys
|
||||||
version: 9ccfe848b9db8435a24c424abbc07a921adf1df5
|
version: e62c3de784db939836898e5c19ffd41bece347da
|
||||||
subpackages:
|
subpackages:
|
||||||
- unix
|
- unix
|
||||||
- name: golang.org/x/text
|
- name: golang.org/x/text
|
||||||
|
@ -29,6 +29,7 @@ import:
|
|||||||
- package: github.com/spf13/cobra
|
- package: github.com/spf13/cobra
|
||||||
- package: github.com/spf13/viper
|
- package: github.com/spf13/viper
|
||||||
- package: gopkg.in/go-playground/validator.v9
|
- package: gopkg.in/go-playground/validator.v9
|
||||||
|
- package: github.com/howeyc/crc16
|
||||||
testImport:
|
testImport:
|
||||||
- package: github.com/mndrix/btcutil
|
- package: github.com/mndrix/btcutil
|
||||||
- package: github.com/stretchr/testify
|
- package: github.com/stretchr/testify
|
||||||
|
63
keys/ecc.go
63
keys/ecc.go
@ -5,6 +5,8 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"hash/crc32"
|
"hash/crc32"
|
||||||
"hash/crc64"
|
"hash/crc64"
|
||||||
|
|
||||||
|
"github.com/howeyc/crc16"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ECC is used for anything that calculates an error-correcting code
|
// ECC is used for anything that calculates an error-correcting code
|
||||||
@ -26,6 +28,67 @@ var _ ECC = NoECC{}
|
|||||||
func (_ NoECC) AddECC(input []byte) []byte { return input }
|
func (_ NoECC) AddECC(input []byte) []byte { return input }
|
||||||
func (_ NoECC) CheckECC(input []byte) ([]byte, error) { return input, nil }
|
func (_ NoECC) CheckECC(input []byte) ([]byte, error) { return input, nil }
|
||||||
|
|
||||||
|
// CRC16 does the ieee crc16 polynomial check
|
||||||
|
type CRC16 struct {
|
||||||
|
Poly uint16
|
||||||
|
table *crc16.Table
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ ECC = &CRC16{}
|
||||||
|
|
||||||
|
const crc16Size = 2
|
||||||
|
|
||||||
|
func NewIBMCRC16() *CRC16 {
|
||||||
|
return &CRC16{Poly: crc16.IBM}
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewSCSICRC16() *CRC16 {
|
||||||
|
return &CRC16{Poly: crc16.SCSI}
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewCCITTCRC16() *CRC16 {
|
||||||
|
return &CRC16{Poly: crc16.CCITT}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CRC16) AddECC(input []byte) []byte {
|
||||||
|
table := c.getTable()
|
||||||
|
|
||||||
|
// get crc and convert to some bytes...
|
||||||
|
crc := crc16.Checksum(input, table)
|
||||||
|
check := make([]byte, crc16Size)
|
||||||
|
binary.BigEndian.PutUint16(check, crc)
|
||||||
|
|
||||||
|
// append it to the input
|
||||||
|
output := append(input, check...)
|
||||||
|
return output
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CRC16) CheckECC(input []byte) ([]byte, error) {
|
||||||
|
table := c.getTable()
|
||||||
|
|
||||||
|
if len(input) <= crc16Size {
|
||||||
|
return nil, errors.New("input too short, no checksum present")
|
||||||
|
}
|
||||||
|
cut := len(input) - crc16Size
|
||||||
|
data, check := input[:cut], input[cut:]
|
||||||
|
crc := binary.BigEndian.Uint16(check)
|
||||||
|
calc := crc16.Checksum(data, table)
|
||||||
|
if crc != calc {
|
||||||
|
return nil, errors.New("Checksum does not match")
|
||||||
|
}
|
||||||
|
return data, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *CRC16) getTable() *crc16.Table {
|
||||||
|
if c.table == nil {
|
||||||
|
if c.Poly == 0 {
|
||||||
|
c.Poly = crc16.IBM
|
||||||
|
}
|
||||||
|
c.table = crc16.MakeTable(c.Poly)
|
||||||
|
}
|
||||||
|
return c.table
|
||||||
|
}
|
||||||
|
|
||||||
// CRC32 does the ieee crc32 polynomial check
|
// CRC32 does the ieee crc32 polynomial check
|
||||||
type CRC32 struct {
|
type CRC32 struct {
|
||||||
Poly uint32
|
Poly uint32
|
||||||
|
@ -14,6 +14,9 @@ func TestECCPasses(t *testing.T) {
|
|||||||
|
|
||||||
checks := []ECC{
|
checks := []ECC{
|
||||||
NoECC{},
|
NoECC{},
|
||||||
|
NewIBMCRC16(),
|
||||||
|
NewSCSICRC16(),
|
||||||
|
NewCCITTCRC16(),
|
||||||
NewIEEECRC32(),
|
NewIEEECRC32(),
|
||||||
NewCastagnoliCRC32(),
|
NewCastagnoliCRC32(),
|
||||||
NewKoopmanCRC32(),
|
NewKoopmanCRC32(),
|
||||||
@ -40,6 +43,9 @@ func TestECCFails(t *testing.T) {
|
|||||||
assert := assert.New(t)
|
assert := assert.New(t)
|
||||||
|
|
||||||
checks := []ECC{
|
checks := []ECC{
|
||||||
|
NewIBMCRC16(),
|
||||||
|
NewSCSICRC16(),
|
||||||
|
NewCCITTCRC16(),
|
||||||
NewIEEECRC32(),
|
NewIEEECRC32(),
|
||||||
NewCastagnoliCRC32(),
|
NewCastagnoliCRC32(),
|
||||||
NewKoopmanCRC32(),
|
NewKoopmanCRC32(),
|
||||||
|
Reference in New Issue
Block a user