90 lines
2.1 KiB
Go
90 lines
2.1 KiB
Go
package signer
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"unsafe"
|
|
|
|
log "github.com/sirupsen/logrus"
|
|
"golang.org/x/sys/unix"
|
|
|
|
"git.cacert.org/cacert-gosigner/datastructures"
|
|
"git.cacert.org/cacert-gosigner/shared"
|
|
)
|
|
|
|
// The CommandProcessor takes parsed protocol data and executes the actual
|
|
// functionality.
|
|
type CommandProcessor struct {
|
|
}
|
|
|
|
// Process the signer request
|
|
func (p *CommandProcessor) Process(command datastructures.SignerRequest) (
|
|
response *datastructures.SignerResponse,
|
|
err error,
|
|
) {
|
|
log.Infof("analyze %+v", command)
|
|
|
|
switch command.Action {
|
|
case shared.ActionNul:
|
|
response, err = p.handleNulAction(command)
|
|
return
|
|
case shared.ActionSign:
|
|
response, err = p.handleSignAction(command)
|
|
return
|
|
case shared.ActionRevoke:
|
|
response, err = p.handleRevokeAction(command)
|
|
return
|
|
default:
|
|
return nil, errors.New(fmt.Sprintf(
|
|
"unsupported Action 0x%02x %s",
|
|
int(command.Action),
|
|
command.Action,
|
|
))
|
|
}
|
|
}
|
|
|
|
func (*CommandProcessor) handleNulAction(command datastructures.SignerRequest) (
|
|
*datastructures.SignerResponse,
|
|
error,
|
|
) {
|
|
var timeSpec unix.Timespec
|
|
err := unix.ClockGettime(unix.CLOCK_REALTIME, &timeSpec)
|
|
if err != nil {
|
|
log.Errorf("could not get system time: %v", err)
|
|
}
|
|
log.Debugf("current system time is %v", timeSpec)
|
|
// TODO: calculate the actual system time from the payload
|
|
_, _, e1 := unix.Syscall(
|
|
unix.SYS_CLOCK_SETTIME,
|
|
uintptr(unix.CLOCK_REALTIME),
|
|
uintptr(unsafe.Pointer(&timeSpec)),
|
|
0,
|
|
)
|
|
if e1 != 0 {
|
|
log.Errorf("could not set system time: %v", e1)
|
|
}
|
|
|
|
return &datastructures.SignerResponse{
|
|
Version: command.Version, Action: command.Action,
|
|
Content1: "", Content2: "", Content3: ""}, nil
|
|
}
|
|
|
|
func (p *CommandProcessor) handleSignAction(
|
|
command datastructures.SignerRequest,
|
|
) (
|
|
*datastructures.SignerResponse,
|
|
error,
|
|
) {
|
|
log.Debugf("handle sign call: %v", command)
|
|
return nil, errors.New("not implemented yet")
|
|
}
|
|
|
|
func (p *CommandProcessor) handleRevokeAction(
|
|
command datastructures.SignerRequest,
|
|
) (
|
|
*datastructures.SignerResponse,
|
|
error,
|
|
) {
|
|
log.Debugf("handle revoke call: %v", command)
|
|
return nil, errors.New("not implemented yet")
|
|
}
|