v2.0.0: claims model - signed MMUR2 votes in a truth DB, merged view in a rebuildable cache DB; POST /api/claims, claims and merge routes, unsigned writes answer 410
Build and Push Docker Image / build (push) Successful in 5m1s
Build and Push Docker Image / build (push) Successful in 5m1s
This commit is contained in:
@@ -307,6 +307,30 @@ func Sign(id *Identity, bytes []byte) ([]byte, error) {
|
||||
return sig.Serialize(), nil
|
||||
}
|
||||
|
||||
// SignCompact is Sign with the 64-byte compact r||s encoding MMUR2 claims
|
||||
// use. decred's RFC 6979 signer always emits low-S, which MMUR2 requires.
|
||||
func SignCompact(id *Identity, bytes []byte) ([]byte, error) {
|
||||
if id == nil {
|
||||
return nil, errors.New("no identity loaded")
|
||||
}
|
||||
raw, err := hex.DecodeString(id.PrivateKeyHex)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("decode private key: %w", err)
|
||||
}
|
||||
if len(raw) != 32 {
|
||||
return nil, fmt.Errorf("private key length %d", len(raw))
|
||||
}
|
||||
priv := secp256k1.PrivKeyFromBytes(raw)
|
||||
digest := sha256.Sum256(bytes)
|
||||
sig := ecdsa.Sign(priv, digest[:])
|
||||
r, s := sig.R(), sig.S()
|
||||
out := make([]byte, 64)
|
||||
rb, sb := r.Bytes(), s.Bytes()
|
||||
copy(out[:32], rb[:])
|
||||
copy(out[32:], sb[:])
|
||||
return out, nil
|
||||
}
|
||||
|
||||
// DeriveAEADKey derives the symmetric key used to encrypt private-tier
|
||||
// User Data Layer records. The KDF parameters (salt, info, length) are
|
||||
// fixed for the v1 wire format.
|
||||
|
||||
Reference in New Issue
Block a user