
FIXED: * Windows logging ADDED: * netx (and netx/inetcksum), the latter of which implements the Internet Checksum as a hash.Hash.
63 lines
1.1 KiB
Go
63 lines
1.1 KiB
Go
package inetcksum
|
|
|
|
import (
|
|
`io`
|
|
)
|
|
|
|
// New returns a new initialized [InetChecksum]. It will never panic.
|
|
func New() (i *InetChecksum) {
|
|
|
|
i = &InetChecksum{}
|
|
_ = i.Aligned()
|
|
|
|
return
|
|
}
|
|
|
|
/*
|
|
NewFromBytes returns a new [InetChecksum] initialized with explicit bytes.
|
|
|
|
b may be nil or 0-length; this will not cause an error.
|
|
*/
|
|
func NewFromBytes(b []byte) (i *InetChecksum, copied int, err error) {
|
|
|
|
var cksum InetChecksum
|
|
|
|
if b != nil && len(b) > 0 {
|
|
if copied, err = cksum.Write(b); err != nil {
|
|
return
|
|
}
|
|
_ = i.Aligned()
|
|
} else {
|
|
i = New()
|
|
return
|
|
}
|
|
|
|
i = &cksum
|
|
|
|
return
|
|
}
|
|
|
|
/*
|
|
NewFromBuf returns an [InetChecksum] from a specified [io.Reader].
|
|
|
|
buf may be nil. If it isn't, NewFromBuf will call [io.Copy] on buf.
|
|
Note that this may exhaust your passed buf or advance its current seek position/offset,
|
|
depending on its type.
|
|
*/
|
|
func NewFromBuf(buf io.Reader) (i *InetChecksum, copied int64, err error) {
|
|
|
|
var cksum InetChecksum
|
|
|
|
_ = i.Aligned()
|
|
|
|
if buf != nil {
|
|
if copied, err = io.Copy(&cksum, buf); err != nil {
|
|
return
|
|
}
|
|
}
|
|
|
|
i = &cksum
|
|
|
|
return
|
|
}
|