32 lines
514 B
Go
32 lines
514 B
Go
|
package signature
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
"sync"
|
||
|
)
|
||
|
|
||
|
var bytesPool = sync.Pool{
|
||
|
New: func() interface{} {
|
||
|
b := make([]byte, 5<<20)
|
||
|
return &b
|
||
|
},
|
||
|
}
|
||
|
|
||
|
func dataForSignature(src DataSource) ([]byte, error) {
|
||
|
if src == nil {
|
||
|
return nil, errors.New("nil source")
|
||
|
}
|
||
|
|
||
|
buf := *bytesPool.Get().(*[]byte)
|
||
|
|
||
|
if size := src.SignedDataSize(); size < 0 {
|
||
|
return nil, errors.New("negative length")
|
||
|
} else if size <= cap(buf) {
|
||
|
buf = buf[:size]
|
||
|
} else {
|
||
|
buf = make([]byte, size)
|
||
|
}
|
||
|
|
||
|
return src.ReadSignedData(buf)
|
||
|
}
|