goldwarden-vaultwarden-bitw.../agent/config/lockedbuffer.go

49 lines
900 B
Go

package config
import "github.com/awnumar/memguard"
type LockedBuffer interface {
Bytes() []byte
Wipe()
}
func NewBuffer(size int, useMemguard bool) LockedBuffer {
if useMemguard {
return MemGuardLockedBuffer{memguard.NewBuffer(size)}
}
return MemoryLockedBuffer{make([]byte, size)}
}
func NewBufferFromBytes(bytes []byte, useMemguard bool) LockedBuffer {
if useMemguard {
return MemGuardLockedBuffer{memguard.NewBufferFromBytes(bytes)}
}
return MemoryLockedBuffer{bytes}
}
type MemGuardLockedBuffer struct {
buffer *memguard.LockedBuffer
}
func (b MemGuardLockedBuffer) Wipe() {
b.buffer.Destroy()
}
func (b MemGuardLockedBuffer) Bytes() []byte {
return b.buffer.Bytes()
}
type MemoryLockedBuffer struct {
buffer []byte
}
func (b MemoryLockedBuffer) Wipe() {
for i := range b.buffer {
b.buffer[i] = 0
}
}
func (b MemoryLockedBuffer) Bytes() []byte {
return b.buffer
}