diff --git a/api/cashu/types.go b/api/cashu/types.go index ad5b570..4bb16c7 100644 --- a/api/cashu/types.go +++ b/api/cashu/types.go @@ -546,7 +546,7 @@ type RecoverSigDB struct { B_ string `json:"B_" db:"B_"` C_ string `json:"C_" db:"C_"` CreatedAt int64 `json:"created_at" db:"created_at"` - Dleq *BlindSignatureDLEQ `json:"dleq"` + Dleq *BlindSignatureDLEQ `json:"dleq,omitempty"` } func (r RecoverSigDB) GetSigAndMessage() (BlindSignature, BlindedMessage) { @@ -565,6 +565,7 @@ func (r RecoverSigDB) GetBlindSignature() BlindSignature { Amount: r.Amount, Id: r.Id, C_: r.C_, + Dleq: r.Dleq, } } @@ -614,6 +615,12 @@ func (b *BlindSignatureDLEQ) UnmarshalJSON(data []byte) error { } func (b *BlindSignatureDLEQ) MarshalJSON() ([]byte, error) { + if b == nil { + return []byte("null"), nil + } + if b.E == nil || b.S == nil { + return []byte("null"), nil + } return json.Marshal(&struct { E string `json:"e"` // We want to encode the E as a string diff --git a/internal/database/postgresql/main.go b/internal/database/postgresql/main.go index e69909e..86ad6e9 100644 --- a/internal/database/postgresql/main.go +++ b/internal/database/postgresql/main.go @@ -357,6 +357,10 @@ func privateKeysToDleq(s_key *string, e_key *string, dleq *cashu.BlindSignatureD if s_key == nil || e_key == nil { return nil } + if *s_key == "" || *e_key == "" { + return nil + } + sBytes, err := hex.DecodeString(*s_key) if err != nil { return errors.New("failed to decode 's' field") @@ -398,6 +402,7 @@ func (pql Postgresql) GetRestoreSigsFromBlindedMessages(B_ []string) ([]cashu.Re if err != nil { return nil, databaseError(fmt.Errorf("row.Scan(&sig.Amount, &sig.Id, &sig.B_, &sig.C_, &sig.CreatedAt, &sig.Dleq.E, &sig.Dleq.S): %w", err)) } + err = privateKeysToDleq(&dleq_s_str, &dleq_e_str, sig.Dleq) if err != nil { return nil, databaseError(fmt.Errorf("privateKeysToDleq(dleq_s_str, dleq_e_str, sig.Dleq). %w", err))