Skip to content

Commit d8cbe4e

Browse files
committed
Use ec.Signature type in wallet
1 parent f6adcce commit d8cbe4e

33 files changed

+223
-128
lines changed

auth/certificates/certificate.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,11 @@ func (c *Certificate) Verify(ctx context.Context) error {
264264
return fmt.Errorf("failed to create verifier wallet: %w", err)
265265
}
266266

267+
signature, err := ec.ParseSignature(c.Signature)
268+
if err != nil {
269+
return fmt.Errorf("failed to parse signature: %w", err)
270+
}
271+
267272
// Get the binary representation without the signature
268273
data, err := c.ToBinary(false)
269274
if err != nil {
@@ -284,7 +289,7 @@ func (c *Certificate) Verify(ctx context.Context) error {
284289
},
285290
},
286291
Data: data,
287-
Signature: c.Signature,
292+
Signature: signature,
288293
}
289294

290295
verifyResult, err := verifier.VerifySignature(ctx, verifyArgs, "")
@@ -343,7 +348,7 @@ func (c *Certificate) Sign(ctx context.Context, certifierWallet *wallet.ProtoWal
343348
}
344349

345350
// Store the signature
346-
c.Signature = signResult.Signature
351+
c.Signature = signResult.Signature.Serialize()
347352

348353
return nil
349354
}

auth/peer.go

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ func (p *Peer) ToPeer(ctx context.Context, message []byte, identityKey *ec.Publi
235235
return fmt.Errorf("failed to sign message: %w", err)
236236
}
237237

238-
generalMessage.Signature = sigResult.Signature
238+
generalMessage.Signature = sigResult.Signature.Serialize()
239239

240240
// Update session timestamp
241241
now := time.Now().UnixNano() / int64(time.Millisecond)
@@ -595,6 +595,11 @@ func (p *Peer) handleCertificateRequest(ctx context.Context, message *AuthMessag
595595
return fmt.Errorf("failed to serialize certificate request data: %w", err)
596596
}
597597

598+
signature, err := ec.ParseSignature(message.Signature)
599+
if err != nil {
600+
return fmt.Errorf("failed to parse signature: %w", err)
601+
}
602+
598603
// Verify signature
599604
verifyResult, err := p.wallet.VerifySignature(ctx, wallet.VerifySignatureArgs{
600605
EncryptionArgs: wallet.EncryptionArgs{
@@ -610,7 +615,7 @@ func (p *Peer) handleCertificateRequest(ctx context.Context, message *AuthMessag
610615
},
611616
},
612617
Data: certRequestData,
613-
Signature: message.Signature,
618+
Signature: signature,
614619
}, "")
615620

616621
if err != nil || !verifyResult.Valid {
@@ -671,6 +676,11 @@ func (p *Peer) handleCertificateResponse(ctx context.Context, message *AuthMessa
671676
return fmt.Errorf("failed to serialize certificate data: %w", err)
672677
}
673678

679+
signature, err := ec.ParseSignature(message.Signature)
680+
if err != nil {
681+
return nil
682+
}
683+
674684
// Verify signature
675685
verifyResult, err := p.wallet.VerifySignature(ctx, wallet.VerifySignatureArgs{
676686
EncryptionArgs: wallet.EncryptionArgs{
@@ -686,7 +696,7 @@ func (p *Peer) handleCertificateResponse(ctx context.Context, message *AuthMessa
686696
},
687697
},
688698
Data: certData,
689-
Signature: message.Signature,
699+
Signature: signature,
690700
}, "")
691701

692702
if err != nil || !verifyResult.Valid {
@@ -762,6 +772,11 @@ func (p *Peer) handleGeneralMessage(ctx context.Context, message *AuthMessage, s
762772
session.LastUpdate = time.Now().UnixMilli()
763773
p.sessionManager.UpdateSession(session)
764774

775+
signature, err := ec.ParseSignature(message.Signature)
776+
if err != nil {
777+
return nil
778+
}
779+
765780
// Verify signature
766781
verifyResult, err := p.wallet.VerifySignature(ctx, wallet.VerifySignatureArgs{
767782
EncryptionArgs: wallet.EncryptionArgs{
@@ -777,7 +792,7 @@ func (p *Peer) handleGeneralMessage(ctx context.Context, message *AuthMessage, s
777792
},
778793
},
779794
Data: message.Payload,
780-
Signature: message.Signature,
795+
Signature: signature,
781796
}, "")
782797

783798
if err != nil || !verifyResult.Valid {
@@ -862,7 +877,7 @@ func (p *Peer) RequestCertificates(ctx context.Context, identityKey *ec.PublicKe
862877
return fmt.Errorf("failed to sign certificate request: %w", err)
863878
}
864879

865-
certRequest.Signature = sigResult.Signature
880+
certRequest.Signature = sigResult.Signature.Serialize()
866881

867882
// Send the request
868883
err = p.transport.Send(ctx, certRequest)
@@ -944,7 +959,7 @@ func (p *Peer) SendCertificateResponse(ctx context.Context, identityKey *ec.Publ
944959
return fmt.Errorf("failed to sign certificate response: %w", err)
945960
}
946961

947-
certResponse.Signature = sigResult.Signature
962+
certResponse.Signature = sigResult.Signature.Serialize()
948963

949964
// Send the response
950965
err = p.transport.Send(ctx, certResponse)

auth/peer_test.go

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -109,13 +109,12 @@ func CreatePeerPair(t *testing.T) (*Peer, *Peer, *wallet.MockWallet, *wallet.Moc
109109
// Setup basic crypto operations
110110
dummySig, err := alicePk.Sign([]byte("test"))
111111
require.NoError(t, err)
112-
dummySigBytes := dummySig.Serialize()
113112

114113
aliceWallet.MockCreateSignature = func(ctx context.Context, args wallet.CreateSignatureArgs, originator string) (*wallet.CreateSignatureResult, error) {
115-
return &wallet.CreateSignatureResult{Signature: dummySigBytes}, nil
114+
return &wallet.CreateSignatureResult{Signature: dummySig}, nil
116115
}
117116
bobWallet.MockCreateSignature = func(ctx context.Context, args wallet.CreateSignatureArgs, originator string) (*wallet.CreateSignatureResult, error) {
118-
return &wallet.CreateSignatureResult{Signature: dummySigBytes}, nil
117+
return &wallet.CreateSignatureResult{Signature: dummySig}, nil
119118
}
120119

121120
aliceWallet.MockVerifySignature = func(ctx context.Context, args wallet.VerifySignatureArgs, originator string) (*wallet.VerifySignatureResult, error) {
@@ -441,7 +440,6 @@ func TestPeerCertificateExchange(t *testing.T) {
441440
require.NoError(t, err)
442441
dummySig, err := dummyKey.Sign([]byte("test"))
443442
require.NoError(t, err)
444-
dummySigBytes := dummySig.Serialize()
445443

446444
// Mock the certificate verification to always succeed
447445
aliceWallet.MockVerifySignature = func(ctx context.Context, args wallet.VerifySignatureArgs, originator string) (*wallet.VerifySignatureResult, error) {
@@ -537,10 +535,10 @@ func TestPeerCertificateExchange(t *testing.T) {
537535

538536
// Setup crypto operations
539537
aliceWallet.MockCreateSignature = func(ctx context.Context, args wallet.CreateSignatureArgs, originator string) (*wallet.CreateSignatureResult, error) {
540-
return &wallet.CreateSignatureResult{Signature: dummySigBytes}, nil
538+
return &wallet.CreateSignatureResult{Signature: dummySig}, nil
541539
}
542540
bobWallet.MockCreateSignature = func(ctx context.Context, args wallet.CreateSignatureArgs, originator string) (*wallet.CreateSignatureResult, error) {
543-
return &wallet.CreateSignatureResult{Signature: dummySigBytes}, nil
541+
return &wallet.CreateSignatureResult{Signature: dummySig}, nil
544542
}
545543

546544
// Force all signature verifications to succeed
@@ -746,13 +744,12 @@ func TestPeerMultiDeviceAuthentication(t *testing.T) {
746744
// Setup crypto operations for both Alice wallets
747745
dummyAliceSig, err := alicePk.Sign([]byte("test"))
748746
require.NoError(t, err)
749-
dummyAliceSigBytes := dummyAliceSig.Serialize()
750747

751748
aliceWallet1.MockCreateSignature = func(ctx context.Context, args wallet.CreateSignatureArgs, originator string) (*wallet.CreateSignatureResult, error) {
752-
return &wallet.CreateSignatureResult{Signature: dummyAliceSigBytes}, nil
749+
return &wallet.CreateSignatureResult{Signature: dummyAliceSig}, nil
753750
}
754751
aliceWallet2.MockCreateSignature = func(ctx context.Context, args wallet.CreateSignatureArgs, originator string) (*wallet.CreateSignatureResult, error) {
755-
return &wallet.CreateSignatureResult{Signature: dummyAliceSigBytes}, nil
752+
return &wallet.CreateSignatureResult{Signature: dummyAliceSig}, nil
756753
}
757754

758755
aliceWallet1.MockVerifySignature = func(ctx context.Context, args wallet.VerifySignatureArgs, originator string) (*wallet.VerifySignatureResult, error) {
@@ -800,17 +797,16 @@ func TestPeerMultiDeviceAuthentication(t *testing.T) {
800797
// Setup Bob's crypto operations
801798
dummyBobSig, err := bobPk.Sign([]byte("test"))
802799
require.NoError(t, err)
803-
dummyBobSigBytes := dummyBobSig.Serialize()
804800

805801
bobWallet1.MockCreateSignature = func(ctx context.Context, args wallet.CreateSignatureArgs, originator string) (*wallet.CreateSignatureResult, error) {
806-
return &wallet.CreateSignatureResult{Signature: dummyBobSigBytes}, nil
802+
return &wallet.CreateSignatureResult{Signature: dummyBobSig}, nil
807803
}
808804
bobWallet1.MockVerifySignature = func(ctx context.Context, args wallet.VerifySignatureArgs, originator string) (*wallet.VerifySignatureResult, error) {
809805
return &wallet.VerifySignatureResult{Valid: true}, nil
810806
}
811807

812808
bobWallet2.MockCreateSignature = func(ctx context.Context, args wallet.CreateSignatureArgs, originator string) (*wallet.CreateSignatureResult, error) {
813-
return &wallet.CreateSignatureResult{Signature: dummyBobSigBytes}, nil
809+
return &wallet.CreateSignatureResult{Signature: dummyBobSig}, nil
814810
}
815811
bobWallet2.MockVerifySignature = func(ctx context.Context, args wallet.VerifySignatureArgs, originator string) (*wallet.VerifySignatureResult, error) {
816812
return &wallet.VerifySignatureResult{Valid: true}, nil
@@ -973,7 +969,6 @@ func TestPartialCertificateAcceptance(t *testing.T) {
973969
require.NoError(t, err)
974970
dummySig, err := dummyKey.Sign([]byte("test"))
975971
require.NoError(t, err)
976-
dummySigBytes := dummySig.Serialize()
977972

978973
// Mock the certificate verification to always succeed
979974
aliceWallet.MockVerifySignature = func(ctx context.Context, args wallet.VerifySignatureArgs, originator string) (*wallet.VerifySignatureResult, error) {
@@ -1065,10 +1060,10 @@ func TestPartialCertificateAcceptance(t *testing.T) {
10651060

10661061
// Setup crypto operations
10671062
aliceWallet.MockCreateSignature = func(ctx context.Context, args wallet.CreateSignatureArgs, originator string) (*wallet.CreateSignatureResult, error) {
1068-
return &wallet.CreateSignatureResult{Signature: dummySigBytes}, nil
1063+
return &wallet.CreateSignatureResult{Signature: dummySig}, nil
10691064
}
10701065
bobWallet.MockCreateSignature = func(ctx context.Context, args wallet.CreateSignatureArgs, originator string) (*wallet.CreateSignatureResult, error) {
1071-
return &wallet.CreateSignatureResult{Signature: dummySigBytes}, nil
1066+
return &wallet.CreateSignatureResult{Signature: dummySig}, nil
10721067
}
10731068

10741069
// Force all signature verifications to succeed
@@ -1286,7 +1281,6 @@ func TestLibraryCardVerification(t *testing.T) {
12861281
require.NoError(t, err)
12871282
dummySig, err := dummyKey.Sign([]byte("test"))
12881283
require.NoError(t, err)
1289-
dummySigBytes := dummySig.Serialize()
12901284

12911285
// Mock the certificate verification to always succeed
12921286
aliceWallet.MockVerifySignature = func(ctx context.Context, args wallet.VerifySignatureArgs, originator string) (*wallet.VerifySignatureResult, error) {
@@ -1342,10 +1336,10 @@ func TestLibraryCardVerification(t *testing.T) {
13421336

13431337
// Setup crypto operations
13441338
aliceWallet.MockCreateSignature = func(ctx context.Context, args wallet.CreateSignatureArgs, originator string) (*wallet.CreateSignatureResult, error) {
1345-
return &wallet.CreateSignatureResult{Signature: dummySigBytes}, nil
1339+
return &wallet.CreateSignatureResult{Signature: dummySig}, nil
13461340
}
13471341
bobWallet.MockCreateSignature = func(ctx context.Context, args wallet.CreateSignatureArgs, originator string) (*wallet.CreateSignatureResult, error) {
1348-
return &wallet.CreateSignatureResult{Signature: dummySigBytes}, nil
1342+
return &wallet.CreateSignatureResult{Signature: dummySig}, nil
13491343
}
13501344

13511345
// Force all signature verifications to succeed
@@ -1622,13 +1616,12 @@ func TestNonmatchingCertificateRejection(t *testing.T) {
16221616
// Set up crypto functions
16231617
dummySig, err := aliceKey.Sign([]byte("test"))
16241618
require.NoError(t, err)
1625-
dummySigBytes := dummySig.Serialize()
16261619

16271620
aliceWallet.MockCreateSignature = func(ctx context.Context, args wallet.CreateSignatureArgs, originator string) (*wallet.CreateSignatureResult, error) {
1628-
return &wallet.CreateSignatureResult{Signature: dummySigBytes}, nil
1621+
return &wallet.CreateSignatureResult{Signature: dummySig}, nil
16291622
}
16301623
bobWallet.MockCreateSignature = func(ctx context.Context, args wallet.CreateSignatureArgs, originator string) (*wallet.CreateSignatureResult, error) {
1631-
return &wallet.CreateSignatureResult{Signature: dummySigBytes}, nil
1624+
return &wallet.CreateSignatureResult{Signature: dummySig}, nil
16321625
}
16331626

16341627
aliceWallet.MockVerifySignature = func(ctx context.Context, args wallet.VerifySignatureArgs, originator string) (*wallet.VerifySignatureResult, error) {

auth/utils/certificate_debug.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,6 @@ func SignCertificateForTest(ctx context.Context, cert wallet.Certificate, signer
105105
return encodedCert, fmt.Errorf("failed to sign certificate: %w", err)
106106
}
107107

108-
// Update the certificate object with the new signature
109-
certObj.Signature = signature.Serialize()
110-
111108
// Convert back to wallet.Certificate format
112109
finalCert := wallet.Certificate{
113110
Type: encodedCert.Type,
@@ -116,7 +113,7 @@ func SignCertificateForTest(ctx context.Context, cert wallet.Certificate, signer
116113
Certifier: &certObj.Certifier,
117114
RevocationOutpoint: encodedCert.RevocationOutpoint,
118115
Fields: encodedCert.Fields,
119-
Signature: certObj.Signature,
116+
Signature: signature,
120117
}
121118

122119
return finalCert, nil

auth/utils/get_verifiable_certificates.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,8 @@ func GetVerifiableCertificates(ctx context.Context, options *GetVerifiableCertif
102102
}
103103

104104
// Handle Signature
105-
if len(certResult.Signature) > 0 {
106-
baseCert.Signature = certResult.Signature
105+
if certResult.Signature != nil {
106+
baseCert.Signature = certResult.Signature.Serialize()
107107
}
108108

109109
// Handle nil Subject and Certifier safely

auth/utils/get_verifiable_certificates_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ func TestGetVerifiableCertificates(t *testing.T) {
3131
certType1 := tu.GetByte32FromString("certType1")
3232
certType2 := tu.GetByte32FromString("certType2")
3333
serial1 := tu.GetByte32FromString("serial1")
34+
const TestSigHex = "3045022100a6f09ee70382ab364f3f6b040aebb8fe7a51dbc3b4c99cfeb2f7756432162833022067349b91a6319345996faddf36d1b2f3a502e4ae002205f9d2db85474f9aed5a"
35+
testSig := tu.GetSigFromHex(t, TestSigHex)
3436

3537
// Test case 1: Retrieves matching certificates based on requested set
3638
t.Run("retrieves matching certificates based on requested set", func(t *testing.T) {
@@ -67,7 +69,7 @@ func TestGetVerifiableCertificates(t *testing.T) {
6769
Certifier: certifier,
6870
RevocationOutpoint: tu.OutpointFromString(t, "a755810c21e17183ff6db6685f0de239fd3a0a3c0d4ba7773b0b0d1748541e2b.0"),
6971
Fields: map[string]string{"field1": field1ValueBase64, "field2": field2ValueBase64}, // Use base64-encoded field values
70-
Signature: []byte{0x01, 0x02, 0x03, 0x04},
72+
Signature: testSig,
7173
},
7274
},
7375
},

identity/client.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ func (c *Client) PubliclyRevealAttributes(
9898
Certifier: *certificate.Certifier,
9999
RevocationOutpoint: revocationOutpoint,
100100
Fields: fields,
101-
Signature: certificate.Signature,
101+
Signature: certificate.Signature.Serialize(),
102102
}
103103

104104
// Verify the certificate
@@ -141,7 +141,7 @@ func (c *Client) PubliclyRevealAttributes(
141141
"certifier": certificate.Certifier.Compressed(),
142142
"revocationOutpoint": revocationOutpointString,
143143
"fields": certificate.Fields,
144-
"signature": hex.EncodeToString(certificate.Signature),
144+
"signature": hex.EncodeToString(certificate.Signature.Serialize()),
145145
"keyring": proveResult.KeyringForVerifier,
146146
}
147147

0 commit comments

Comments
 (0)