viem-goviem-go

serializeCompactSignature

Combines compact signature components into a hex string (EIP-2098)

serializeCompactSignature

Combines compact signature components (R and YParityAndS) into a hex formatted compact signature string (EIP-2098).

Import

import "github.com/ChefBingbong/viem-go/utils/signature"

Usage

import "github.com/ChefBingbong/viem-go/utils/signature"
hexSig, err := signature.SerializeCompactSignature(&signature.CompactSignature{
R: "0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90",
YParityAndS: "0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064",
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("Compact Signature: %s
", hexSig)
// Compact Signature: 0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b907e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064
// Serialize to bytes
sigBytes, _ := signature.SerializeCompactSignatureBytes(&signature.CompactSignature{
R: "0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90",
YParityAndS: "0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064",
})
// []byte{0x68, 0xa0, ...} (64 bytes)

Returns

  • Type: (string, error) for SerializeCompactSignature, ([]byte, error) for SerializeCompactSignatureBytes

The serialized compact signature. SerializeCompactSignature returns a hex string with 0x prefix (64 bytes), SerializeCompactSignatureBytes returns raw bytes.

Parameters

signature (required)

  • Type: *signature.CompactSignature

The compact signature struct containing R and YParityAndS components.

sig := &signature.CompactSignature{
R: "0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90",
YParityAndS: "0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064",
}
hexSig, _ := signature.SerializeCompactSignature(sig)

R (required)

  • Type: string

The R component of the signature (32 bytes as hex string).

sig := &signature.CompactSignature{
R: "0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90",
// ...
}

YParityAndS (required)

  • Type: string

The S component with yParity encoded in the top bit of the first byte (32 bytes as hex string).

sig := &signature.CompactSignature{
YParityAndS: "0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064",
// ...
}

Functions

SerializeCompactSignature

Serializes a compact signature to a hex string:

hexSig, _ := signature.SerializeCompactSignature(sig)
// "0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b907e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064"

SerializeCompactSignatureBytes

Serializes a compact signature to bytes:

sigBytes, _ := signature.SerializeCompactSignatureBytes(sig)
// []byte{0x68, 0xa0, ...} (64 bytes)

Conversion Functions

SignatureToCompactSignature

Converts a regular Signature to a CompactSignature:

compact, _ := signature.SignatureToCompactSignature(&signature.Signature{
    R:       "0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90",
    S:       "0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064",
    YParity: 0,
})

CompactSignatureToSignature

Converts a CompactSignature back to a regular Signature:

sig, _ := signature.CompactSignatureToSignature(compact)

Notes

  • Compact signatures are 64 bytes instead of 65 bytes (saves 1 byte)
  • The yParity is encoded in the top bit (bit 7) of the first byte of S
  • EIP-2098 format is commonly used in Ethereum to reduce signature size