* Added new SafeFile (io.WriteCloser) class + methods to atomically write a file. * Teach core lib to use SafeFile for all file I/O * Teach sigtool to use SafeFile for all file I/O * Cleaned up the public interfaces of sign/ to be more coherent: - with uniform APIs for marshaling, unmarshaling, serialization. - removed KeyPair class/interface and stick to PrivateKey as the primary interface. * collected common rand utility functions into rand.go * Teach sigtool to NOT overwrite existing output files (keys, signatures etc.) * Teach sigtool to use a new --overwrite option for every command that creates files (generate, sign, encrypt, decrypt) * encrypt/decrypt will try to use the input file mode/perm where possible (unless input is stdin). * Added more tests
40 lines
833 B
Go
40 lines
833 B
Go
// rand.go - utility functions to generate random quantities
|
|
//
|
|
// (c) 2018 Sudhi Herle <sudhi@herle.net>
|
|
//
|
|
// Licensing Terms: GPLv2
|
|
//
|
|
// If you need a commercial license for this work, please contact
|
|
// the author.
|
|
//
|
|
// This software does not come with any express or implied
|
|
// warranty; it is provided "as is". No claim is made to its
|
|
// suitability for any purpose.
|
|
|
|
package sign
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"encoding/binary"
|
|
"fmt"
|
|
"io"
|
|
)
|
|
|
|
func randu32() uint32 {
|
|
var b [4]byte
|
|
|
|
_, err := io.ReadFull(rand.Reader, b[:])
|
|
if err != nil {
|
|
panic(fmt.Sprintf("can't read 4 rand bytes: %s", err))
|
|
}
|
|
|
|
return binary.LittleEndian.Uint32(b[:])
|
|
}
|
|
|
|
func randRead(b []byte) []byte {
|
|
_, err := io.ReadFull(rand.Reader, b)
|
|
if err != nil {
|
|
panic(fmt.Sprintf("can't read %d bytes of random data: %s", len(b), err))
|
|
}
|
|
return b
|
|
}
|