forked from toolshed/abra
chore: vendor
This commit is contained in:
65
vendor/github.com/containers/image/pkg/keyctl/key.go
generated
vendored
Normal file
65
vendor/github.com/containers/image/pkg/keyctl/key.go
generated
vendored
Normal file
@ -0,0 +1,65 @@
|
||||
// Copyright 2015 Jesse Sipprell. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build linux
|
||||
// +build linux
|
||||
|
||||
package keyctl
|
||||
|
||||
import (
|
||||
"golang.org/x/sys/unix"
|
||||
)
|
||||
|
||||
// Key represents a single key linked to one or more kernel keyrings.
|
||||
type Key struct {
|
||||
Name string
|
||||
|
||||
id, ring keyID
|
||||
size int
|
||||
}
|
||||
|
||||
// ID returns the 32-bit kernel identifier for a specific key
|
||||
func (k *Key) ID() int32 {
|
||||
return int32(k.id)
|
||||
}
|
||||
|
||||
// Get the key's value as a byte slice
|
||||
func (k *Key) Get() ([]byte, error) {
|
||||
var (
|
||||
b []byte
|
||||
err error
|
||||
sizeRead int
|
||||
)
|
||||
|
||||
if k.size == 0 {
|
||||
k.size = 512
|
||||
}
|
||||
|
||||
size := k.size
|
||||
|
||||
b = make([]byte, int(size))
|
||||
sizeRead = size + 1
|
||||
for sizeRead > size {
|
||||
r1, err := unix.KeyctlBuffer(unix.KEYCTL_READ, int(k.id), b, size)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if sizeRead = int(r1); sizeRead > size {
|
||||
b = make([]byte, sizeRead)
|
||||
size = sizeRead
|
||||
sizeRead = size + 1
|
||||
} else {
|
||||
k.size = sizeRead
|
||||
}
|
||||
}
|
||||
return b[:k.size], err
|
||||
}
|
||||
|
||||
// Unlink a key from the keyring it was loaded from (or added to). If the key
|
||||
// is not linked to any other keyrings, it is destroyed.
|
||||
func (k *Key) Unlink() error {
|
||||
_, err := unix.KeyctlInt(unix.KEYCTL_UNLINK, int(k.id), int(k.ring), 0, 0)
|
||||
return err
|
||||
}
|
Reference in New Issue
Block a user