flatbuffer changes

This commit is contained in:
Brian Hendriks
2024-08-28 16:01:24 -07:00
parent a4b285ae98
commit c8c252a143
3 changed files with 42 additions and 23 deletions

View File

@@ -190,14 +190,6 @@ func (rcv *Commit) Description() []byte {
return nil
}
func (rcv *Commit) Signature() []byte {
o := flatbuffers.UOffsetT(rcv._tab.Offset(22))
if o != 0 {
return rcv._tab.ByteVector(o + rcv._tab.Pos)
}
return nil
}
func (rcv *Commit) TimestampMillis() uint64 {
o := flatbuffers.UOffsetT(rcv._tab.Offset(18))
if o != 0 {
@@ -222,6 +214,14 @@ func (rcv *Commit) MutateUserTimestampMillis(n int64) bool {
return rcv._tab.MutateInt64Slot(20, n)
}
func (rcv *Commit) Signature() []byte {
o := flatbuffers.UOffsetT(rcv._tab.Offset(22))
if o != 0 {
return rcv._tab.ByteVector(o + rcv._tab.Pos)
}
return nil
}
const CommitNumFields = 10
func CommitStart(builder *flatbuffers.Builder) {
@@ -266,7 +266,6 @@ func CommitAddUserTimestampMillis(builder *flatbuffers.Builder, userTimestampMil
func CommitAddSignature(builder *flatbuffers.Builder, signature flatbuffers.UOffsetT) {
builder.PrependUOffsetTSlot(9, flatbuffers.UOffsetT(signature), 0)
}
func CommitEnd(builder *flatbuffers.Builder) flatbuffers.UOffsetT {
return builder.EndObject()
}

View File

@@ -11,56 +11,55 @@ import (
"strings"
)
func Sign(ctx context.Context, keyId string, message []byte) ([]byte, error) {
args := []string{"--clear-sign", "-u", keyId}
func execGpgAndReadOutput(ctx context.Context, in []byte, args []string) (*bytes.Buffer, *bytes.Buffer, error) {
cmdStr := fmt.Sprintf("gpg %s", strings.Join(args, " "))
cmd := exec.CommandContext(ctx, "gpg", args...)
stdOut, err := cmd.StdoutPipe()
if err != nil {
return nil, fmt.Errorf("failed to get stdout for command '%s': %w", cmdStr, err)
return nil, nil, fmt.Errorf("failed to get stdout for command '%s': %w", cmdStr, err)
}
stdErr, err := cmd.StderrPipe()
if err != nil {
return nil, fmt.Errorf("failed to get stderr for command '%s': %w", cmdStr, err)
return nil, nil, fmt.Errorf("failed to get stderr for command '%s': %w", cmdStr, err)
}
stdIn, err := cmd.StdinPipe()
if err != nil {
return nil, fmt.Errorf("failed to get stdin for command '%s': %w", cmdStr, err)
return nil, nil, fmt.Errorf("failed to get stdin for command '%s': %w", cmdStr, err)
}
err = cmd.Start()
if err != nil {
return nil, fmt.Errorf("failed to start command '%s': %w", cmdStr, err)
return nil, nil, fmt.Errorf("failed to start command '%s': %w", cmdStr, err)
}
eg, egCtx := errgroup.WithContext(ctx)
outBuf := listenToOut(egCtx, eg, stdOut)
errBuf := listenToOut(egCtx, eg, stdErr)
n, err := io.Copy(stdIn, strings.NewReader(string(message)))
n, err := io.Copy(stdIn, strings.NewReader(string(in)))
if err != nil {
return nil, fmt.Errorf("failed to write stdin for command '%s': %w", cmdStr, err)
} else if n < int64(len(message)) {
return nil, fmt.Errorf("failed to write stdin for command '%s': EOF before all bytes written", cmd)
return nil, nil, fmt.Errorf("failed to write stdin for command '%s': %w", cmdStr, err)
} else if n < int64(len(in)) {
return nil, nil, fmt.Errorf("failed to write stdin for command '%s': EOF before all bytes written", cmd)
}
err = stdIn.Close()
if err != nil {
return nil, fmt.Errorf("failed to close stdin for command '%s': %w", cmdStr, err)
return nil, nil, fmt.Errorf("failed to close stdin for command '%s': %w", cmdStr, err)
}
for {
state, err := cmd.Process.Wait()
if err != nil {
return nil, fmt.Errorf("failed to wait for command '%s': %w", cmdStr, err)
return nil, nil, fmt.Errorf("failed to wait for command '%s': %w", cmdStr, err)
}
if state.Exited() {
if state.ExitCode() != 0 {
return nil, fmt.Errorf("command '%s' exited with code %d. stdout: '%s', stderr: '%s'", cmdStr, state.ExitCode(), outBuf.String(), errBuf.String())
return nil, nil, fmt.Errorf("command '%s' exited with code %d. stdout: '%s', stderr: '%s'", cmdStr, state.ExitCode(), outBuf.String(), errBuf.String())
}
break
@@ -69,7 +68,27 @@ func Sign(ctx context.Context, keyId string, message []byte) ([]byte, error) {
err = eg.Wait()
if err != nil {
return nil, fmt.Errorf("failed to read output for command '%s': %w", cmdStr, err)
return nil, nil, fmt.Errorf("failed to read output for command '%s': %w", cmdStr, err)
}
return outBuf, errBuf, nil
}
func Sign(ctx context.Context, keyId string, message []byte) ([]byte, error) {
args := []string{"--clear-sign", "-u", keyId}
outBuf, _, err := execGpgAndReadOutput(ctx, message, args)
if err != nil {
return nil, err
}
return outBuf.Bytes(), nil
}
func Verify(ctx context.Context, signature []byte) ([]byte, error) {
args := []string{"--verify"}
outBuf, _, err := execGpgAndReadOutput(ctx, signature, args)
if err != nil {
return nil, err
}
return outBuf.Bytes(), nil

View File

@@ -28,6 +28,7 @@ table Commit {
description:string (required);
timestamp_millis:uint64;
user_timestamp_millis:int64;
signature:string;
}
// KEEP THIS IN SYNC WITH fileidentifiers.go