Skip to content

Commit 058bfb2

Browse files
committedNov 20, 2024·
Refactored PKI module
1 parent 2ee694c commit 058bfb2

20 files changed

+470
-466
lines changed
 

‎x/pki/keeper/approved_root_certificates.go

+10-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,16 @@ func (k Keeper) AddApprovedRootCertificate(ctx sdk.Context, certificate types.Ce
5656
}
5757

5858
// Remove root certificate from the list.
59-
func (k Keeper) RemoveApprovedRootCertificate(ctx sdk.Context, certID types.CertificateIdentifier) {
59+
func (k Keeper) RemoveApprovedRootCertificate(
60+
ctx sdk.Context,
61+
subject string,
62+
subjectKeyID string,
63+
) {
64+
certID := types.CertificateIdentifier{
65+
Subject: subject,
66+
SubjectKeyId: subjectKeyID,
67+
}
68+
6069
rootCertificates, _ := k.GetApprovedRootCertificates(ctx)
6170

6271
certIDIndex := -1

‎x/pki/keeper/certificate_helpers.go

+257
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,257 @@
1+
package keeper
2+
3+
import (
4+
"math"
5+
6+
sdk "github.com/cosmos/cosmos-sdk/types"
7+
pkitypes "github.com/zigbee-alliance/distributed-compliance-ledger/types/pki"
8+
authTypes "github.com/zigbee-alliance/distributed-compliance-ledger/x/dclauth/types"
9+
"github.com/zigbee-alliance/distributed-compliance-ledger/x/pki/types"
10+
)
11+
12+
func (k Keeper) CertificateApprovalsCount(ctx sdk.Context, authKeeper types.DclauthKeeper) int {
13+
return int(math.Ceil(types.RootCertificateApprovalsPercent *
14+
float64(authKeeper.CountAccountsWithRole(ctx, authTypes.Trustee))))
15+
}
16+
17+
func (k Keeper) CertificateRejectApprovalsCount(ctx sdk.Context, authKeeper types.DclauthKeeper) int {
18+
return authKeeper.CountAccountsWithRole(ctx, authTypes.Trustee) - k.CertificateApprovalsCount(ctx, authKeeper) + 1
19+
}
20+
21+
func (k Keeper) EnsureVidMatches(ctx sdk.Context, owner string, signer string) error {
22+
// get signer VID
23+
signerAddr, err := sdk.AccAddressFromBech32(signer)
24+
if err != nil {
25+
return pkitypes.NewErrInvalidAddress(err)
26+
}
27+
28+
signerAccount, _ := k.dclauthKeeper.GetAccountO(ctx, signerAddr)
29+
signerVid := signerAccount.VendorID
30+
31+
// get owner VID
32+
ownerAddr, err := sdk.AccAddressFromBech32(owner)
33+
if err != nil {
34+
return pkitypes.NewErrInvalidAddress(err)
35+
}
36+
37+
ownerAccount, _ := k.dclauthKeeper.GetAccountO(ctx, ownerAddr)
38+
ownerVid := ownerAccount.VendorID
39+
40+
if signerVid != ownerVid {
41+
return pkitypes.NewErrUnauthorizedCertVendor(ownerVid)
42+
}
43+
44+
return nil
45+
}
46+
47+
func RemoveCertFromList(issuer string, serialNumber string, certs *[]*types.Certificate) {
48+
certIndex := -1
49+
50+
for i, cert := range *certs {
51+
if cert.SerialNumber == serialNumber && cert.Issuer == issuer {
52+
certIndex = i
53+
54+
break
55+
}
56+
}
57+
if certIndex == -1 {
58+
return
59+
}
60+
*certs = append((*certs)[:certIndex], (*certs)[certIndex+1:]...)
61+
}
62+
63+
func FindCertificateInList(serialNumber string, certificates *[]*types.Certificate) (*types.Certificate, bool) {
64+
for _, cert := range *certificates {
65+
if cert.SerialNumber == serialNumber {
66+
return cert, true
67+
}
68+
}
69+
70+
return nil, false
71+
}
72+
73+
func FilterCertificateList(certificates *[]*types.Certificate, predicate CertificatePredicate) []*types.Certificate {
74+
var result []*types.Certificate
75+
76+
for _, s := range *certificates {
77+
if predicate(s) {
78+
result = append(result, s)
79+
}
80+
}
81+
82+
return result
83+
}
84+
85+
func (k msgServer) AddCertificateToGlobalCertificateIndexes(
86+
ctx sdk.Context,
87+
certificate types.Certificate,
88+
) {
89+
// add to the global list of certificates
90+
k.AddAllCertificate(ctx, certificate)
91+
// add to the global list of certificates indexed by subject key id
92+
k.AddAllCertificateBySubjectKeyID(ctx, certificate)
93+
// add to the global list of certificates indexed by subject
94+
k.AddAllCertificateBySubject(ctx, certificate.Subject, certificate.SubjectKeyId)
95+
}
96+
97+
func (k msgServer) RemoveCertificateFromGlobalCertificateIndexes(
98+
ctx sdk.Context,
99+
subject string,
100+
subjectKeyID string,
101+
) {
102+
// remove from the global list of certificates
103+
k.RemoveAllCertificates(ctx, subject, subjectKeyID)
104+
// remove from the global list of certificates indexed by subject key id
105+
k.RemoveAllCertificatesBySubjectKeyID(ctx, subject, subjectKeyID)
106+
// remove from the global list of certificates indexed by subject
107+
k.RemoveAllCertificateBySubject(ctx, subject, subjectKeyID)
108+
}
109+
110+
func (k msgServer) StoreDaCertificate(
111+
ctx sdk.Context,
112+
certificate types.Certificate,
113+
isRoot bool,
114+
) {
115+
// add to Global certificates indexes
116+
k.AddCertificateToGlobalCertificateIndexes(ctx, certificate)
117+
118+
// add to list of certificates with the same Subject/SubjectKeyID combination and store updated list
119+
k.AddApprovedCertificate(ctx, certificate)
120+
121+
// add to list of certificates indexed by subject
122+
k.AddApprovedCertificateBySubject(ctx, certificate.Subject, certificate.SubjectKeyId)
123+
124+
// add to list of certificates indexed by subject key id
125+
k.AddApprovedCertificateBySubjectKeyID(ctx, certificate)
126+
127+
if isRoot {
128+
// add to root certificates index
129+
k.AddApprovedRootCertificate(ctx, certificate)
130+
} else {
131+
// add the certificate identifier to the issuer's Child Certificates record
132+
k.AddChildCertificate(ctx, certificate)
133+
}
134+
}
135+
136+
func (k msgServer) RemoveDaCertificate(
137+
ctx sdk.Context,
138+
subject string,
139+
subjectKeyID string,
140+
isRoot bool,
141+
) {
142+
// remove from global list
143+
k.RemoveCertificateFromGlobalCertificateIndexes(ctx, subject, subjectKeyID)
144+
// remove from approved certificates map
145+
k.RemoveApprovedCertificates(ctx, subject, subjectKeyID)
146+
// remove from subject -> subject key ID map
147+
k.RemoveApprovedCertificateBySubject(ctx, subject, subjectKeyID)
148+
// remove from subject key ID -> certificates map
149+
k.RemoveApprovedCertificatesBySubjectKeyID(ctx, subject, subjectKeyID)
150+
if isRoot {
151+
k.RemoveApprovedRootCertificate(ctx, subject, subjectKeyID)
152+
}
153+
}
154+
155+
func (k msgServer) RemoveDaCertificateBySerialNumber(
156+
ctx sdk.Context,
157+
subject string,
158+
subjectKeyID string,
159+
certificates *types.ApprovedCertificates,
160+
serialNumber string,
161+
issuer string,
162+
) {
163+
RemoveCertFromList(issuer, serialNumber, &certificates.Certs)
164+
165+
if len(certificates.Certs) == 0 {
166+
k.RemoveDaCertificate(ctx, subject, subjectKeyID, false)
167+
} else {
168+
k.RemoveAllCertificatesBySerialNumber(ctx, subject, subjectKeyID, serialNumber)
169+
k.RemoveAllCertificatesBySubjectKeyIDBySerialNumber(ctx, subject, subjectKeyID, serialNumber)
170+
k.RemoveApprovedCertificatesBySerialNumber(ctx, subject, subjectKeyID, serialNumber)
171+
k.RemoveApprovedCertificatesBySubjectKeyIDBySerialNumber(ctx, subject, subjectKeyID, serialNumber)
172+
}
173+
}
174+
175+
func (k msgServer) StoreNocCertificate(
176+
ctx sdk.Context,
177+
certificate types.Certificate,
178+
isRoot bool) {
179+
// add to Global certificates indexes
180+
k.AddCertificateToGlobalCertificateIndexes(ctx, certificate)
181+
182+
// add to the list of all NOC certificates
183+
k.AddNocCertificate(ctx, certificate)
184+
185+
// add to certificates map indexed by vid/skid
186+
k.AddNocCertificateByVidAndSkid(ctx, certificate)
187+
188+
// add to certificates map indexed by subject
189+
k.AddNocCertificateBySubject(ctx, certificate)
190+
191+
// add to certificates map indexed by subject key id
192+
k.AddNocCertificateBySubjectKeyID(ctx, certificate)
193+
194+
if isRoot {
195+
// add to the list of NOC root certificates with the same VID
196+
k.AddNocRootCertificate(ctx, certificate)
197+
} else {
198+
// add to the list of NOC ica certificates with the same VID
199+
k.AddNocIcaCertificate(ctx, certificate)
200+
// add the certificate identifier to the issuer's Child Certificates record
201+
k.AddChildCertificate(ctx, certificate)
202+
}
203+
}
204+
205+
func (k msgServer) RemoveNocCertificate(
206+
ctx sdk.Context,
207+
subject string,
208+
subjectKeyID string,
209+
accountVid int32,
210+
isRoot bool,
211+
) {
212+
// remove from global list
213+
k.RemoveCertificateFromGlobalCertificateIndexes(ctx, subject, subjectKeyID)
214+
// remove from noc certificates map
215+
k.RemoveNocCertificates(ctx, subject, subjectKeyID)
216+
// remove from vid, subject key id map
217+
k.RemoveNocCertificatesByVidAndSkid(ctx, accountVid, subjectKeyID)
218+
// remove from subject -> subject key ID map
219+
k.RemoveNocCertificateBySubject(ctx, subject, subjectKeyID)
220+
// remove from subject key ID -> certificates map
221+
k.RemoveNocCertificatesBySubjectAndSubjectKeyID(ctx, subject, subjectKeyID)
222+
if isRoot {
223+
// remove from noc root certificates map
224+
k.RemoveNocRootCertificate(ctx, subject, subjectKeyID, accountVid)
225+
} else {
226+
// remove from noc ica certificates map
227+
k.RemoveNocIcaCertificate(ctx, subject, subjectKeyID, accountVid)
228+
}
229+
}
230+
231+
func (k msgServer) RemoveNocCertBySerialNumber(
232+
ctx sdk.Context,
233+
subject string,
234+
subjectKeyID string,
235+
certificates *types.NocCertificates,
236+
accountVid int32,
237+
serialNumber string,
238+
issuer string,
239+
isRoot bool,
240+
) {
241+
RemoveCertFromList(issuer, serialNumber, &certificates.Certs)
242+
243+
if len(certificates.Certs) == 0 {
244+
k.RemoveNocCertificate(ctx, subject, subjectKeyID, accountVid, isRoot)
245+
} else {
246+
k.RemoveAllCertificatesBySerialNumber(ctx, subject, subjectKeyID, serialNumber)
247+
k.RemoveAllCertificatesBySubjectKeyIDBySerialNumber(ctx, subject, subjectKeyID, serialNumber)
248+
k.RemoveNocCertificatesBySerialNumber(ctx, subject, subjectKeyID, serialNumber)
249+
k.RemoveNocCertificatesBySubjectKeyIDBySerialNumber(ctx, subject, subjectKeyID, serialNumber)
250+
k.RemoveNocCertificatesByVidAndSkidBySerialNumber(ctx, accountVid, subject, subjectKeyID, serialNumber)
251+
if isRoot {
252+
k.RemoveNocRootCertificateBySerialNumber(ctx, subject, subjectKeyID, accountVid, serialNumber)
253+
} else {
254+
k.RemoveNocIcaCertificateBySerialNumber(ctx, subject, subjectKeyID, accountVid, serialNumber)
255+
}
256+
}
257+
}

‎x/pki/keeper/child_certificates.go

+10-18
Original file line numberDiff line numberDiff line change
@@ -113,18 +113,13 @@ func (k msgServer) RevokeApprovedChildCertificates(ctx sdk.Context, issuer strin
113113

114114
// For each child certificate subject/subjectKeyID combination
115115
for _, certIdentifier := range childCertificates.CertIds {
116-
// Revoke certificates with this subject/subjectKeyID combination
116+
// Add revoked certificates with this subject/subjectKeyID combination
117117
certificates, _ := k.GetApprovedCertificates(ctx, certIdentifier.Subject, certIdentifier.SubjectKeyId)
118118
k.AddRevokedCertificates(ctx, types.RevokedCertificates(certificates))
119-
120-
// Remove certificate from global list
121-
k.RemoveCertificateFromAllCertificateIndexes(ctx, *certIdentifier)
122-
123119
// Remove certificate from da list
124-
k.RemoveCertificateFromDaCertificateIndexes(ctx, *certIdentifier, false)
125-
120+
k.RemoveDaCertificate(ctx, certificates.Subject, certificates.SubjectKeyId, false)
126121
// Process child certificates recursively
127-
k.RevokeApprovedChildCertificates(ctx, certIdentifier.Subject, certIdentifier.SubjectKeyId)
122+
k.RevokeApprovedChildCertificates(ctx, certificates.Subject, certificates.SubjectKeyId)
128123
}
129124

130125
// Delete entire ChildCertificates record of issuer
@@ -137,30 +132,27 @@ func (k msgServer) RevokeNocChildCertificates(ctx sdk.Context, issuer string, au
137132

138133
// For each child certificate subject/subjectKeyID combination
139134
for _, certIdentifier := range childCertificates.CertIds {
140-
// Revoke certificates with this subject/subjectKeyID combination
135+
// Add revoked certificates with this subject/subjectKeyID combination
141136
certificates, _ := k.GetNocCertificates(ctx, certIdentifier.Subject, certIdentifier.SubjectKeyId)
142-
143137
k.AddRevokedNocIcaCertificates(ctx, types.RevokedNocIcaCertificates{
144138
Subject: certificates.Subject,
145139
SubjectKeyId: certificates.SubjectKeyId,
146140
Certs: certificates.Certs,
147141
})
148-
149-
// Remove certificate from global list
150-
k.RemoveCertificateFromAllCertificateIndexes(ctx, *certIdentifier)
151-
152142
// Remove certificate from da list
153-
k.RemoveCertificateFromNocCertificateIndexes(ctx, *certIdentifier, certificates.Certs[0].Vid, false)
154-
143+
k.RemoveNocCertificate(ctx, certificates.Subject, certificates.SubjectKeyId, certificates.Certs[0].Vid, false)
155144
// Process child certificates recursively
156-
k.RevokeNocChildCertificates(ctx, certIdentifier.Subject, certIdentifier.SubjectKeyId)
145+
k.RevokeNocChildCertificates(ctx, certificates.Subject, certificates.SubjectKeyId)
157146
}
158147

159148
// Delete entire ChildCertificates record of issuer
160149
k.RemoveChildCertificates(ctx, issuer, authorityKeyID)
161150
}
162151

163-
func (k msgServer) RemoveChildCertificate(ctx sdk.Context, issuer string, authorityKeyID string,
152+
func (k msgServer) RemoveChildCertificate(
153+
ctx sdk.Context,
154+
issuer string,
155+
authorityKeyID string,
164156
certIdentifier types.CertificateIdentifier,
165157
) {
166158
childCertificates, _ := k.GetChildCertificates(ctx, issuer, authorityKeyID)

‎x/pki/keeper/keeper.go

+1-220
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,13 @@ package keeper
22

33
import (
44
"fmt"
5-
"math"
65

76
"github.com/cometbft/cometbft/libs/log"
87
"github.com/cosmos/cosmos-sdk/codec"
98
storetypes "github.com/cosmos/cosmos-sdk/store/types"
109
sdk "github.com/cosmos/cosmos-sdk/types"
10+
1111
pkitypes "github.com/zigbee-alliance/distributed-compliance-ledger/types/pki"
12-
authTypes "github.com/zigbee-alliance/distributed-compliance-ledger/x/dclauth/types"
1312
"github.com/zigbee-alliance/distributed-compliance-ledger/x/pki/types"
1413
)
1514

@@ -43,221 +42,3 @@ func NewKeeper(
4342
func (k Keeper) Logger(ctx sdk.Context) log.Logger {
4443
return ctx.Logger().With("module", fmt.Sprintf("x/%s", pkitypes.ModuleName))
4544
}
46-
47-
func (k Keeper) CertificateApprovalsCount(ctx sdk.Context, authKeeper types.DclauthKeeper) int {
48-
return int(math.Ceil(types.RootCertificateApprovalsPercent *
49-
float64(authKeeper.CountAccountsWithRole(ctx, authTypes.Trustee))))
50-
}
51-
52-
func (k Keeper) CertificateRejectApprovalsCount(ctx sdk.Context, authKeeper types.DclauthKeeper) int {
53-
return authKeeper.CountAccountsWithRole(ctx, authTypes.Trustee) - k.CertificateApprovalsCount(ctx, authKeeper) + 1
54-
}
55-
56-
func (k Keeper) EnsureVidMatches(ctx sdk.Context, owner string, signer string) error {
57-
// get signer VID
58-
signerAddr, err := sdk.AccAddressFromBech32(signer)
59-
if err != nil {
60-
return pkitypes.NewErrInvalidAddress(err)
61-
}
62-
63-
signerAccount, _ := k.dclauthKeeper.GetAccountO(ctx, signerAddr)
64-
signerVid := signerAccount.VendorID
65-
66-
// get owner VID
67-
ownerAddr, err := sdk.AccAddressFromBech32(owner)
68-
if err != nil {
69-
return pkitypes.NewErrInvalidAddress(err)
70-
}
71-
72-
ownerAccount, _ := k.dclauthKeeper.GetAccountO(ctx, ownerAddr)
73-
ownerVid := ownerAccount.VendorID
74-
75-
if signerVid != ownerVid {
76-
return pkitypes.NewErrUnauthorizedCertVendor(ownerVid)
77-
}
78-
79-
return nil
80-
}
81-
82-
func removeCertFromList(issuer string, serialNumber string, certs *[]*types.Certificate) {
83-
certIndex := -1
84-
85-
for i, cert := range *certs {
86-
if cert.SerialNumber == serialNumber && cert.Issuer == issuer {
87-
certIndex = i
88-
89-
break
90-
}
91-
}
92-
if certIndex == -1 {
93-
return
94-
}
95-
*certs = append((*certs)[:certIndex], (*certs)[certIndex+1:]...)
96-
}
97-
98-
func findCertificate(serialNumber string, certificates *[]*types.Certificate) (*types.Certificate, bool) {
99-
for _, cert := range *certificates {
100-
if cert.SerialNumber == serialNumber {
101-
return cert, true
102-
}
103-
}
104-
105-
return nil, false
106-
}
107-
108-
func filterCertificates(certificates *[]*types.Certificate, predicate CertificatePredicate) []*types.Certificate {
109-
var result []*types.Certificate
110-
111-
for _, s := range *certificates {
112-
if predicate(s) {
113-
result = append(result, s)
114-
}
115-
}
116-
117-
return result
118-
}
119-
120-
func (k msgServer) AddCertificateToAllCertificateIndexes(ctx sdk.Context, certificate types.Certificate) {
121-
// Add to the global list of certificates
122-
k.AddAllCertificate(ctx, certificate)
123-
124-
// append to global list of certificates indexed by subject
125-
k.AddAllCertificateBySubject(ctx, certificate.Subject, certificate.SubjectKeyId)
126-
}
127-
128-
func (k msgServer) AddCertificateToDaCertificateIndexes(
129-
ctx sdk.Context,
130-
certificate types.Certificate,
131-
isRoot bool) {
132-
// append new certificate to list of certificates with the same Subject/SubjectKeyID combination and store updated list
133-
k.AddApprovedCertificate(ctx, certificate)
134-
135-
// add to subject -> subject key ID map
136-
k.AddApprovedCertificateBySubject(ctx, certificate.Subject, certificate.SubjectKeyId)
137-
138-
// add to subject key ID -> certificates map
139-
k.AddApprovedCertificateBySubjectKeyID(ctx, certificate)
140-
141-
if isRoot {
142-
// add to root certificates index
143-
k.AddApprovedRootCertificate(ctx, certificate)
144-
} else {
145-
// add the certificate identifier to the issuer's Child Certificates record
146-
k.AddChildCertificate(ctx, certificate)
147-
}
148-
}
149-
150-
func (k msgServer) AddCertificateToNocCertificateIndexes(
151-
ctx sdk.Context,
152-
certificate types.Certificate,
153-
isRoot bool) {
154-
// Add to the list of all NOC certificates
155-
k.AddNocCertificate(ctx, certificate)
156-
157-
// add to certificates map indexed by { vid, subject key id }
158-
k.AddNocCertificateByVidAndSkid(ctx, certificate)
159-
160-
// add to certificates map indexed by { subject }
161-
k.AddNocCertificateBySubject(ctx, certificate)
162-
163-
// add to certificates map indexed by { subject key id }
164-
k.AddNocCertificateBySubjectKeyID(ctx, certificate)
165-
166-
if isRoot {
167-
// Add to the list of NOC root certificates with the same VID
168-
k.AddNocRootCertificate(ctx, certificate)
169-
} else {
170-
// Add to the list of NOC ica certificates with the same VID
171-
k.AddNocIcaCertificate(ctx, certificate)
172-
// add the certificate identifier to the issuer's Child Certificates record
173-
k.AddChildCertificate(ctx, certificate)
174-
}
175-
}
176-
177-
func (k msgServer) RemoveCertificateFromAllCertificateIndexes(ctx sdk.Context, certID types.CertificateIdentifier) {
178-
// remove from global certificates map
179-
k.RemoveAllCertificates(ctx, certID.Subject, certID.SubjectKeyId)
180-
// remove from global subject -> subject key ID map
181-
k.RemoveAllCertificateBySubject(ctx, certID.Subject, certID.SubjectKeyId)
182-
}
183-
184-
func (k msgServer) RemoveCertificateFromDaCertificateIndexes(
185-
ctx sdk.Context,
186-
certID types.CertificateIdentifier,
187-
isRoot bool) {
188-
// remove from approved certificates map
189-
k.RemoveApprovedCertificates(ctx, certID.Subject, certID.SubjectKeyId)
190-
// remove from subject -> subject key ID map
191-
k.RemoveApprovedCertificateBySubject(ctx, certID.Subject, certID.SubjectKeyId)
192-
// remove from subject key ID -> certificates map
193-
k.RemoveApprovedCertificatesBySubjectKeyID(ctx, certID.Subject, certID.SubjectKeyId)
194-
if isRoot {
195-
k.RemoveApprovedRootCertificate(ctx, certID)
196-
}
197-
}
198-
199-
func (k msgServer) RemoveCertificateFromNocCertificateIndexes(
200-
ctx sdk.Context,
201-
certID types.CertificateIdentifier,
202-
accountVid int32,
203-
isRoot bool) {
204-
// remove from noc certificates map
205-
k.RemoveNocCertificates(ctx, certID.Subject, certID.SubjectKeyId)
206-
// remove from vid, subject key id map
207-
k.RemoveNocCertificatesByVidAndSkid(ctx, accountVid, certID.SubjectKeyId)
208-
// remove from subject -> subject key ID map
209-
k.RemoveNocCertificateBySubject(ctx, certID.Subject, certID.SubjectKeyId)
210-
// remove from subject key ID -> certificates map
211-
k.RemoveNocCertificatesBySubjectAndSubjectKeyID(ctx, certID.Subject, certID.SubjectKeyId)
212-
if isRoot {
213-
// remove from noc root certificates map
214-
k.RemoveNocRootCertificate(ctx, certID.Subject, certID.SubjectKeyId, accountVid)
215-
} else {
216-
// remove from noc ica certificates map
217-
k.RemoveNocIcaCertificate(ctx, certID.Subject, certID.SubjectKeyId, accountVid)
218-
}
219-
}
220-
221-
func (k msgServer) removeDaX509Cert(
222-
ctx sdk.Context,
223-
certID types.CertificateIdentifier,
224-
certificates *types.ApprovedCertificates,
225-
serialNumber string) {
226-
if len(certificates.Certs) == 0 {
227-
// remove from global certificates map
228-
k.RemoveCertificateFromAllCertificateIndexes(ctx, certID)
229-
// remove from noc certificates map
230-
k.RemoveCertificateFromDaCertificateIndexes(ctx, certID, false)
231-
} else {
232-
k.RemoveAllCertificatesBySerialNumber(ctx, certID.Subject, certID.SubjectKeyId, serialNumber)
233-
k.RemoveApprovedCertificatesBySerialNumber(ctx, certID.Subject, certID.SubjectKeyId, serialNumber)
234-
k.RemoveApprovedCertificatesBySubjectKeyIDBySerialNumber(ctx, certID.Subject, certID.SubjectKeyId, serialNumber)
235-
}
236-
}
237-
238-
func (k msgServer) removeNocX509Cert(
239-
ctx sdk.Context,
240-
certID types.CertificateIdentifier,
241-
certificates *types.NocCertificates,
242-
accountVid int32,
243-
serialNumber string,
244-
isRoot bool,
245-
) {
246-
if len(certificates.Certs) == 0 { //nolint:nestif
247-
// remove from global certificates map
248-
k.RemoveCertificateFromAllCertificateIndexes(ctx, certID)
249-
// remove from noc certificates map
250-
k.RemoveCertificateFromNocCertificateIndexes(ctx, certID, accountVid, isRoot)
251-
} else {
252-
k.RemoveAllCertificatesBySerialNumber(ctx, certID.Subject, certID.SubjectKeyId, serialNumber)
253-
k.RemoveNocCertificatesBySerialNumber(ctx, certID.Subject, certID.SubjectKeyId, serialNumber)
254-
k.RemoveNocCertificatesBySubjectKeyIDBySerialNumber(ctx, certID.Subject, certID.SubjectKeyId, serialNumber)
255-
k.RemoveNocCertificatesByVidAndSkidBySerialNumber(ctx, accountVid, certID.Subject, certID.SubjectKeyId, serialNumber)
256-
257-
if isRoot {
258-
k.RemoveNocRootCertificateBySerialNumber(ctx, certID.Subject, certID.SubjectKeyId, accountVid, serialNumber)
259-
} else {
260-
k.RemoveNocIcaCertificateBySerialNumber(ctx, certID.Subject, certID.SubjectKeyId, accountVid, serialNumber)
261-
}
262-
}
263-
}

‎x/pki/keeper/msg_server_add_noc_x_509_ica_cert.go

+3-11
Original file line numberDiff line numberDiff line change
@@ -104,18 +104,10 @@ func (k msgServer) AddNocX509IcaCert(goCtx context.Context, msg *types.MsgAddNoc
104104
)
105105

106106
// register the unique certificate key
107-
uniqueCertificate := types.UniqueCertificate{
108-
Issuer: x509Certificate.Issuer,
109-
SerialNumber: x509Certificate.SerialNumber,
110-
Present: true,
111-
}
112-
k.SetUniqueCertificate(ctx, uniqueCertificate)
113-
114-
// Add to the indexes for global certificates list
115-
k.AddCertificateToAllCertificateIndexes(ctx, certificate)
107+
k.SetUniqueX509Certificate(ctx, x509Certificate)
116108

117-
// Add to the indexes for noc certificates list
118-
k.AddCertificateToNocCertificateIndexes(ctx, certificate, false)
109+
// store Noc certificate in indexes
110+
k.StoreNocCertificate(ctx, certificate, false)
119111

120112
return &types.MsgAddNocX509IcaCertResponse{}, nil
121113
}

‎x/pki/keeper/msg_server_add_noc_x_509_root_cert.go

+3-11
Original file line numberDiff line numberDiff line change
@@ -85,18 +85,10 @@ func (k msgServer) AddNocX509RootCert(goCtx context.Context, msg *types.MsgAddNo
8585
)
8686

8787
// register the unique certificate key
88-
uniqueCertificate := types.UniqueCertificate{
89-
Issuer: x509Certificate.Issuer,
90-
SerialNumber: x509Certificate.SerialNumber,
91-
Present: true,
92-
}
93-
k.SetUniqueCertificate(ctx, uniqueCertificate)
94-
95-
// Add to the indexes for global certificates list
96-
k.AddCertificateToAllCertificateIndexes(ctx, certificate)
88+
k.SetUniqueX509Certificate(ctx, x509Certificate)
9789

98-
// Add to the indexes for noc certificates list
99-
k.AddCertificateToNocCertificateIndexes(ctx, certificate, true)
90+
// store Noc certificate in indexes
91+
k.StoreNocCertificate(ctx, certificate, true)
10092

10193
return &types.MsgAddNocX509RootCertResponse{}, nil
10294
}

‎x/pki/keeper/msg_server_add_x_509_cert.go

+3-11
Original file line numberDiff line numberDiff line change
@@ -108,18 +108,10 @@ func (k msgServer) AddX509Cert(goCtx context.Context, msg *types.MsgAddX509Cert)
108108
)
109109

110110
// register the unique certificate key
111-
uniqueCertificate := types.UniqueCertificate{
112-
Issuer: x509Certificate.Issuer,
113-
SerialNumber: x509Certificate.SerialNumber,
114-
Present: true,
115-
}
116-
k.SetUniqueCertificate(ctx, uniqueCertificate)
117-
118-
// Add to the indexes for global certificates list
119-
k.AddCertificateToAllCertificateIndexes(ctx, certificate)
111+
k.SetUniqueX509Certificate(ctx, x509Certificate)
120112

121-
// Add to the indexes for DA certificates list
122-
k.AddCertificateToDaCertificateIndexes(ctx, certificate, false)
113+
// store DA certificate in indexes
114+
k.StoreDaCertificate(ctx, certificate, false)
123115

124116
return &types.MsgAddX509CertResponse{}, nil
125117
}

‎x/pki/keeper/msg_server_approve_add_x_509_root_cert.go

+2-5
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,8 @@ func (k msgServer) ApproveAddX509RootCert(goCtx context.Context, msg *types.MsgA
7979
// delete proposed certificate
8080
k.RemoveProposedCertificate(ctx, msg.Subject, msg.SubjectKeyId)
8181

82-
// Add to the indexes for global certificates list
83-
k.AddCertificateToAllCertificateIndexes(ctx, rootCertificate)
84-
85-
// Add to the indexes for DA certificates list
86-
k.AddCertificateToDaCertificateIndexes(ctx, rootCertificate, true)
82+
// store DA certificate in indexes
83+
k.StoreDaCertificate(ctx, rootCertificate, true)
8784
} else {
8885
// update proposed certificate
8986
k.SetProposedCertificate(ctx, proposedCertificate)

‎x/pki/keeper/msg_server_approve_revoke_x_509_root_cert.go

+25-35
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,12 @@ func (k msgServer) ApproveRevokeX509RootCert(goCtx context.Context, msg *types.M
6565
k.RemoveProposedCertificateRevocation(ctx, msg.Subject, msg.SubjectKeyId, msg.SerialNumber)
6666

6767
if msg.SerialNumber != "" {
68-
k._revokeRootCertificateBySerialNumber(ctx, revocation.Approvals, msg.SerialNumber, certificates, revocation.SchemaVersion)
68+
err := k.revokeRootCertificateBySerialNumber(ctx, revocation.Approvals, msg.SerialNumber, certificates)
69+
if err != nil {
70+
return nil, err
71+
}
6972
} else {
70-
k._revokeRootCertificates(ctx, revocation.Approvals, certificates, revocation.SchemaVersion)
73+
k.revokeRootCertificate(ctx, revocation.Approvals, certificates, revocation.SchemaVersion)
7174
}
7275

7376
if revocation.RevokeChild {
@@ -80,7 +83,7 @@ func (k msgServer) ApproveRevokeX509RootCert(goCtx context.Context, msg *types.M
8083
return &types.MsgApproveRevokeX509RootCertResponse{}, nil
8184
}
8285

83-
func (k msgServer) _revokeRootCertificates(
86+
func (k msgServer) revokeRootCertificate(
8487
ctx sdk.Context,
8588
approvals []*types.Grant,
8689
certificates types.ApprovedCertificates,
@@ -92,29 +95,23 @@ func (k msgServer) _revokeRootCertificates(
9295
cert.Approvals = approvals
9396
}
9497
}
95-
certID := types.CertificateIdentifier{
96-
Subject: certificates.Subject,
97-
SubjectKeyId: certificates.SubjectKeyId,
98-
}
9998

10099
// remove from root certs index, add to revoked root certs
101100
k.AddRevokedCertificates(ctx, types.RevokedCertificates(certificates))
102-
103-
// Remove certificate from global list
104-
k.RemoveCertificateFromAllCertificateIndexes(ctx, certID)
105-
106-
// Remove certificate from da list
107-
k.RemoveCertificateFromDaCertificateIndexes(ctx, certID, true)
101+
// remove certificate from da list
102+
k.RemoveDaCertificate(ctx, certificates.Subject, certificates.SubjectKeyId, true)
108103
}
109104

110-
func (k msgServer) _revokeRootCertificateBySerialNumber(
105+
func (k msgServer) revokeRootCertificateBySerialNumber(
111106
ctx sdk.Context,
112107
approvals []*types.Grant,
113108
serialNumber string,
114109
certificates types.ApprovedCertificates,
115-
schemaVersion uint32,
116-
) {
117-
cert, _ := findCertificate(serialNumber, &certificates.Certs)
110+
) error {
111+
cert, found := FindCertificateInList(serialNumber, &certificates.Certs)
112+
if !found {
113+
return pkitypes.NewErrCertificateBySerialNumberDoesNotExist(certificates.Subject, certificates.SubjectKeyId, serialNumber)
114+
}
118115
cert.Approvals = approvals
119116
revCert := types.RevokedCertificates{
120117
Subject: cert.Subject,
@@ -126,22 +123,15 @@ func (k msgServer) _revokeRootCertificateBySerialNumber(
126123
// remove from root certs index, add to revoked root certs
127124
k.AddRevokedCertificates(ctx, revCert)
128125

129-
removeCertFromList(cert.Issuer, cert.SerialNumber, &certificates.Certs)
130-
131-
if len(certificates.Certs) == 0 {
132-
certID := types.CertificateIdentifier{
133-
Subject: certificates.Subject,
134-
SubjectKeyId: certificates.SubjectKeyId,
135-
}
136-
137-
// Remove certificate from global list
138-
k.RemoveCertificateFromAllCertificateIndexes(ctx, certID)
139-
140-
// Remove certificate from da list
141-
k.RemoveCertificateFromDaCertificateIndexes(ctx, certID, true)
142-
} else {
143-
k.SetApprovedCertificates(ctx, certificates)
144-
k.RemoveAllCertificatesBySerialNumber(ctx, cert.Subject, cert.SubjectKeyId, serialNumber)
145-
k.RemoveApprovedCertificatesBySubjectKeyIDBySerialNumber(ctx, cert.Subject, cert.SubjectKeyId, serialNumber)
146-
}
126+
// remove from certificate indexes
127+
k.RemoveDaCertificateBySerialNumber(
128+
ctx,
129+
cert.Subject,
130+
cert.SubjectKeyId,
131+
&certificates,
132+
cert.SerialNumber,
133+
cert.Issuer,
134+
)
135+
136+
return nil
147137
}

‎x/pki/keeper/msg_server_propose_add_x_509_root_cert.go

+1-6
Original file line numberDiff line numberDiff line change
@@ -109,12 +109,7 @@ func (k msgServer) ProposeAddX509RootCert(goCtx context.Context, msg *types.MsgP
109109
}
110110

111111
// register the unique certificate key
112-
uniqueCertificate := types.UniqueCertificate{
113-
Issuer: x509Certificate.Issuer,
114-
SerialNumber: x509Certificate.SerialNumber,
115-
Present: true,
116-
}
117-
k.SetUniqueCertificate(ctx, uniqueCertificate)
112+
k.SetUniqueX509Certificate(ctx, x509Certificate)
118113

119114
return &types.MsgProposeAddX509RootCertResponse{}, nil
120115
}

‎x/pki/keeper/msg_server_propose_revoke_x_509_root_cert.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ func (k msgServer) ProposeRevokeX509RootCert(goCtx context.Context, msg *types.M
4747
}
4848
// fail if cert with serial number does not exist
4949
if msg.SerialNumber != "" {
50-
_, found = findCertificate(msg.SerialNumber, &certificates.Certs)
50+
_, found = FindCertificateInList(msg.SerialNumber, &certificates.Certs)
5151
if !found {
5252
return nil, pkitypes.NewErrCertificateBySerialNumberDoesNotExist(
5353
msg.Subject, msg.SubjectKeyId, msg.SerialNumber,

‎x/pki/keeper/msg_server_remove_noc_x_509_ica_cert.go

+14-9
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ func (k msgServer) RemoveNocX509IcaCert(goCtx context.Context, msg *types.MsgRem
6060
}
6161

6262
if msg.SerialNumber != "" {
63-
certBySerialNumber, found := findCertificate(msg.SerialNumber, &certificates)
63+
certBySerialNumber, found := FindCertificateInList(msg.SerialNumber, &certificates)
6464
if !found {
6565
return nil, pkitypes.NewErrCertificateBySerialNumberDoesNotExist(msg.Subject, msg.SubjectKeyId, msg.SerialNumber)
6666
}
@@ -70,22 +70,27 @@ func (k msgServer) RemoveNocX509IcaCert(goCtx context.Context, msg *types.MsgRem
7070

7171
if foundActive {
7272
// Remove from certificates lists
73-
removeCertFromList(certBySerialNumber.Issuer, certBySerialNumber.SerialNumber, &icaCerts.Certs)
74-
k.removeNocX509Cert(ctx, certID, &icaCerts, accountVid, msg.SerialNumber, false)
73+
k.RemoveNocCertBySerialNumber(
74+
ctx,
75+
certBySerialNumber.Subject,
76+
certBySerialNumber.SubjectKeyId,
77+
&icaCerts,
78+
accountVid,
79+
certBySerialNumber.SerialNumber,
80+
certBySerialNumber.Issuer,
81+
false,
82+
)
7583
}
7684

7785
if foundRevoked {
78-
removeCertFromList(certBySerialNumber.Issuer, certBySerialNumber.SerialNumber, &revCerts.Certs)
86+
RemoveCertFromList(certBySerialNumber.Issuer, certBySerialNumber.SerialNumber, &revCerts.Certs)
7987
k.removeRevokedNocX509IcaCert(ctx, certID, &revCerts)
8088
}
8189
} else {
82-
// remove from global certificates map
83-
k.RemoveCertificateFromAllCertificateIndexes(ctx, certID)
84-
// remove from noc certificates map
85-
k.RemoveCertificateFromNocCertificateIndexes(ctx, certID, accountVid, false)
8690
// remove from revoked list
8791
k.RemoveRevokedNocIcaCertificates(ctx, certID.Subject, certID.SubjectKeyId)
88-
92+
// remove from noc certificates map
93+
k.RemoveNocCertificate(ctx, cert.Subject, cert.SubjectKeyId, accountVid, false)
8994
// remove from subject with serialNumber map
9095
for _, cert := range certificates {
9196
k.RemoveUniqueCertificate(ctx, cert.Issuer, cert.SerialNumber)

‎x/pki/keeper/msg_server_remove_noc_x_509_root_cert.go

+14-8
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ func (k msgServer) RemoveNocX509RootCert(goCtx context.Context, msg *types.MsgRe
5656
}
5757

5858
if msg.SerialNumber != "" {
59-
certBySerialNumber, found := findCertificate(msg.SerialNumber, &certificates)
59+
certBySerialNumber, found := FindCertificateInList(msg.SerialNumber, &certificates)
6060
if !found {
6161
return nil, pkitypes.NewErrCertificateBySerialNumberDoesNotExist(msg.Subject, msg.SubjectKeyId, msg.SerialNumber)
6262
}
@@ -66,21 +66,27 @@ func (k msgServer) RemoveNocX509RootCert(goCtx context.Context, msg *types.MsgRe
6666

6767
if foundActive {
6868
// Remove from lists
69-
removeCertFromList(certBySerialNumber.Issuer, certBySerialNumber.SerialNumber, &nocCerts.Certs)
70-
k.removeNocX509Cert(ctx, certID, &nocCerts, accountVid, msg.SerialNumber, true)
69+
k.RemoveNocCertBySerialNumber(
70+
ctx,
71+
certBySerialNumber.Subject,
72+
certBySerialNumber.SubjectKeyId,
73+
&nocCerts,
74+
accountVid,
75+
msg.SerialNumber,
76+
cert.Issuer,
77+
true,
78+
)
7179
}
7280

7381
if foundRevoked {
74-
removeCertFromList(certBySerialNumber.Issuer, certBySerialNumber.SerialNumber, &revCerts.Certs)
82+
RemoveCertFromList(certBySerialNumber.Issuer, certBySerialNumber.SerialNumber, &revCerts.Certs)
7583
k.removeRevokedNocX509RootCert(ctx, certID, &revCerts)
7684
}
7785
} else {
78-
// remove from global certificates map
79-
k.RemoveCertificateFromAllCertificateIndexes(ctx, certID)
80-
// remove from noc certificates map
81-
k.RemoveCertificateFromNocCertificateIndexes(ctx, certID, accountVid, true)
8286
// remove from revoked noc root certs
8387
k.RemoveRevokedNocRootCertificates(ctx, certID.Subject, certID.SubjectKeyId)
88+
// remove from noc certificates map
89+
k.RemoveNocCertificate(ctx, cert.Subject, cert.SubjectKeyId, accountVid, true)
8490
// remove from subject with serialNumber map
8591
for _, cert := range certificates {
8692
k.RemoveUniqueCertificate(ctx, cert.Subject, cert.SerialNumber)

‎x/pki/keeper/msg_server_remove_x_509_cert.go

+27-21
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,8 @@ func (k msgServer) RemoveX509Cert(goCtx context.Context, msg *types.MsgRemoveX50
4444
return nil, err
4545
}
4646

47-
certID := types.CertificateIdentifier{
48-
Subject: msg.Subject,
49-
SubjectKeyId: msg.SubjectKeyId,
50-
}
51-
5247
if msg.SerialNumber != "" {
53-
certBySerialNumber, found := findCertificate(msg.SerialNumber, &certificates)
48+
certBySerialNumber, found := FindCertificateInList(msg.SerialNumber, &certificates)
5449
if !found {
5550
return nil, pkitypes.NewErrCertificateBySerialNumberDoesNotExist(msg.Subject, msg.SubjectKeyId, msg.SerialNumber)
5651
}
@@ -59,26 +54,37 @@ func (k msgServer) RemoveX509Cert(goCtx context.Context, msg *types.MsgRemoveX50
5954
k.RemoveUniqueCertificate(ctx, certBySerialNumber.Issuer, certBySerialNumber.SerialNumber)
6055

6156
if foundApproved {
62-
removeCertFromList(certBySerialNumber.Issuer, certBySerialNumber.SerialNumber, &aprCerts.Certs)
63-
k.removeDaX509Cert(ctx, certID, &aprCerts, msg.SerialNumber)
57+
k.RemoveDaCertificateBySerialNumber(
58+
ctx,
59+
certBySerialNumber.Subject,
60+
certBySerialNumber.SubjectKeyId,
61+
&aprCerts,
62+
certBySerialNumber.SerialNumber,
63+
certBySerialNumber.Issuer,
64+
)
6465
}
6566
if foundRevoked {
66-
removeCertFromList(certBySerialNumber.Issuer, certBySerialNumber.SerialNumber, &revCerts.Certs)
67-
k.removeOrUpdateRevokedX509Cert(ctx, certID, &revCerts)
67+
RemoveCertFromList(certBySerialNumber.Issuer, certBySerialNumber.SerialNumber, &revCerts.Certs)
68+
k.removeOrUpdateRevokedX509Cert(ctx, msg.Subject, msg.SubjectKeyId, &revCerts)
6869
}
6970
} else {
70-
// remove from global certificates map
71-
k.RemoveCertificateFromAllCertificateIndexes(ctx, certID)
72-
// remove from noc certificates map
73-
k.RemoveCertificateFromDaCertificateIndexes(ctx, certID, false)
74-
// remove from revoked list
75-
k.RemoveRevokedCertificates(ctx, certID.Subject, certID.SubjectKeyId)
76-
77-
// remove from subject with serialNumber map
78-
for _, cert := range certificates {
79-
k.RemoveUniqueCertificate(ctx, cert.Issuer, cert.SerialNumber)
80-
}
71+
k.revokeCertificate(ctx, aprCerts)
8172
}
8273

8374
return &types.MsgRemoveX509CertResponse{}, nil
8475
}
76+
77+
func (k msgServer) revokeCertificate(
78+
ctx sdk.Context,
79+
certificates types.ApprovedCertificates,
80+
) {
81+
// remove from noc certificates map
82+
k.RemoveDaCertificate(ctx, certificates.Subject, certificates.SubjectKeyId, false)
83+
// remove from revoked list
84+
k.RemoveRevokedCertificates(ctx, certificates.Subject, certificates.SubjectKeyId)
85+
86+
// remove from subject with serialNumber map
87+
for _, cert := range certificates.Certs {
88+
k.RemoveUniqueCertificate(ctx, cert.Issuer, cert.SerialNumber)
89+
}
90+
}

‎x/pki/keeper/msg_server_revoke_noc_x_509_ica_cert.go

+29-38
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,12 @@ func (k msgServer) RevokeNocX509IcaCert(goCtx context.Context, msg *types.MsgRev
4444
}
4545

4646
if msg.SerialNumber != "" {
47-
err = k._revokeNocCertificate(ctx, msg.SerialNumber, certificates, cert.Vid)
47+
err = k.revokeNocIcaCertificateBySerialNumber(ctx, msg.SerialNumber, certificates, cert.Vid)
4848
if err != nil {
4949
return nil, err
5050
}
5151
} else {
52-
k._revokeNocIcaCertificates(ctx, certificates, cert.Vid)
52+
k.revokeNocIcaCertificate(ctx, certificates, cert.Vid)
5353
}
5454

5555
if msg.RevokeChild {
@@ -60,68 +60,59 @@ func (k msgServer) RevokeNocX509IcaCert(goCtx context.Context, msg *types.MsgRev
6060
return &types.MsgRevokeNocX509IcaCertResponse{}, nil
6161
}
6262

63-
func (k msgServer) _revokeNocCertificate(
63+
func (k msgServer) revokeNocIcaCertificateBySerialNumber(
6464
ctx sdk.Context,
6565
serialNumber string,
6666
certificates types.NocCertificates,
6767
vid int32,
6868
) error {
69-
cert, found := findCertificate(serialNumber, &certificates.Certs)
69+
cert, found := FindCertificateInList(serialNumber, &certificates.Certs)
7070
if !found {
7171
return pkitypes.NewErrCertificateBySerialNumberDoesNotExist(
7272
certificates.Subject, certificates.SubjectKeyId, serialNumber,
7373
)
7474
}
7575

76-
revCerts := types.RevokedNocIcaCertificates{
76+
k.AddRevokedNocIcaCertificates(ctx, types.RevokedNocIcaCertificates{
7777
Subject: cert.Subject,
7878
SubjectKeyId: cert.SubjectKeyId,
7979
Certs: []*types.Certificate{cert},
80-
}
81-
k.AddRevokedNocIcaCertificates(ctx, revCerts)
80+
})
8281

83-
removeCertFromList(cert.Issuer, cert.SerialNumber, &certificates.Certs)
84-
85-
certID := types.CertificateIdentifier{
86-
Subject: certificates.Subject,
87-
SubjectKeyId: certificates.SubjectKeyId,
88-
}
82+
k.RemoveNocCertBySerialNumber(
83+
ctx,
84+
cert.Subject,
85+
cert.SubjectKeyId,
86+
&certificates,
87+
vid,
88+
cert.SerialNumber,
89+
cert.Issuer,
90+
false,
91+
)
8992

9093
if len(certificates.Certs) == 0 {
91-
// Remove certificate from global list
92-
k.RemoveCertificateFromAllCertificateIndexes(ctx, certID)
93-
// Remove certificate from noc list
94-
k.RemoveCertificateFromNocCertificateIndexes(ctx, certID, vid, false)
95-
} else {
96-
k.RemoveAllCertificatesBySerialNumber(ctx, cert.Subject, cert.SubjectKeyId, serialNumber)
97-
k.RemoveNocCertificatesBySerialNumber(ctx, cert.Subject, cert.SubjectKeyId, serialNumber)
98-
k.RemoveNocIcaCertificateBySerialNumber(ctx, cert.Subject, cert.SubjectKeyId, vid, serialNumber)
99-
k.RemoveNocCertificatesByVidAndSkidBySerialNumber(ctx, vid, cert.Subject, cert.SubjectKeyId, serialNumber)
100-
k.RemoveNocCertificatesBySubjectKeyIDBySerialNumber(ctx, cert.Subject, cert.SubjectKeyId, serialNumber)
94+
k.RemoveChildCertificate(ctx, cert.Issuer, cert.AuthorityKeyId, types.CertificateIdentifier{
95+
Subject: certificates.Subject,
96+
SubjectKeyId: certificates.SubjectKeyId,
97+
})
10198
}
10299

103100
return nil
104101
}
105102

106-
func (k msgServer) _revokeNocIcaCertificates(ctx sdk.Context, certificates types.NocCertificates, vid int32) {
103+
func (k msgServer) revokeNocIcaCertificate(ctx sdk.Context, certificates types.NocCertificates, vid int32) {
104+
certID := types.CertificateIdentifier{
105+
Subject: certificates.Subject,
106+
SubjectKeyId: certificates.SubjectKeyId,
107+
}
107108
// Add certs into revoked lists
108109
k.AddRevokedNocIcaCertificates(ctx, types.RevokedNocIcaCertificates{
109110
Subject: certificates.Subject,
110111
SubjectKeyId: certificates.SubjectKeyId,
111112
Certs: certificates.Certs,
112113
})
113-
// remove cert from global certs list
114-
k.RemoveAllCertificates(ctx, certificates.Subject, certificates.SubjectKeyId)
115-
// remove cert from global certs list -> subject key ID map
116-
k.RemoveAllCertificateBySubject(ctx, certificates.Subject, certificates.SubjectKeyId)
117-
// remove cert from NOC certs list
118-
k.RemoveNocCertificates(ctx, certificates.Subject, certificates.SubjectKeyId)
119-
// remove cert from NOC ica certs list
120-
k.RemoveNocIcaCertificate(ctx, certificates.Subject, certificates.SubjectKeyId, vid)
121-
// remove from subject -> subject key ID map
122-
k.RemoveNocCertificateBySubject(ctx, certificates.Subject, certificates.SubjectKeyId)
123-
// remove from subject key ID -> certificates map
124-
k.RemoveNocCertificatesBySubjectAndSubjectKeyID(ctx, certificates.Subject, certificates.SubjectKeyId)
125-
// remove from vid, subject key ID -> certificates map
126-
k.RemoveNocCertificateByVidSubjectAndSkid(ctx, vid, certificates.Subject, certificates.SubjectKeyId)
114+
// Remove certificate from noc list
115+
k.RemoveNocCertificate(ctx, certificates.Subject, certificates.SubjectKeyId, vid, false)
116+
// Remove certificate identifier from issuer's ChildCertificates record
117+
k.RemoveChildCertificate(ctx, certificates.Certs[0].Issuer, certificates.Certs[0].AuthorityKeyId, certID)
127118
}

‎x/pki/keeper/msg_server_revoke_noc_x_509_root_cert.go

+19-40
Original file line numberDiff line numberDiff line change
@@ -45,83 +45,62 @@ func (k msgServer) RevokeNocX509RootCert(goCtx context.Context, msg *types.MsgRe
4545
}
4646

4747
if msg.SerialNumber != "" {
48-
err = k._revokeNocRootCertificateBySerialNumber(ctx, msg.SerialNumber, certificates, cert.Vid)
48+
err = k.revokeNocRootCertificateBySerialNumber(ctx, msg.SerialNumber, certificates, cert.Vid)
4949
if err != nil {
5050
return nil, err
5151
}
5252
} else {
53-
k._revokeNocRootCertificates(ctx, certificates, cert.Vid)
53+
k.revokeNocRootCertificate(ctx, certificates, cert.Vid)
5454
}
5555

5656
if msg.RevokeChild {
57-
certID := types.CertificateIdentifier{
58-
Subject: msg.Subject,
59-
SubjectKeyId: msg.SubjectKeyId,
60-
}
6157
// Remove certificate identifier from issuer's ChildCertificates record
62-
k.RevokeNocChildCertificates(ctx, certID.Subject, certID.SubjectKeyId)
58+
k.RevokeNocChildCertificates(ctx, msg.Subject, msg.SubjectKeyId)
6359
}
6460

6561
return &types.MsgRevokeNocX509RootCertResponse{}, nil
6662
}
6763

68-
func (k msgServer) _revokeNocRootCertificateBySerialNumber(
64+
func (k msgServer) revokeNocRootCertificateBySerialNumber(
6965
ctx sdk.Context,
7066
serialNumber string,
7167
certificates types.NocCertificates,
7268
vid int32,
7369
) error {
74-
cert, found := findCertificate(serialNumber, &certificates.Certs)
70+
cert, found := FindCertificateInList(serialNumber, &certificates.Certs)
7571
if !found {
7672
return pkitypes.NewErrCertificateBySerialNumberDoesNotExist(
7773
certificates.Subject, certificates.SubjectKeyId, serialNumber,
7874
)
7975
}
8076

81-
revNocCerts := types.RevokedNocRootCertificates{
77+
k.AddRevokedNocRootCertificates(ctx, types.RevokedNocRootCertificates{
8278
Subject: certificates.Subject,
8379
SubjectKeyId: certificates.SubjectKeyId,
8480
Certs: []*types.Certificate{cert},
85-
}
86-
k.AddRevokedNocRootCertificates(ctx, revNocCerts)
87-
88-
removeCertFromList(cert.Issuer, cert.SerialNumber, &certificates.Certs)
89-
90-
certID := types.CertificateIdentifier{
91-
Subject: cert.Subject,
92-
SubjectKeyId: cert.SubjectKeyId,
93-
}
81+
})
9482

95-
if len(certificates.Certs) == 0 {
96-
// Remove certificate from global list
97-
k.RemoveCertificateFromAllCertificateIndexes(ctx, certID)
98-
// Remove certificate from noc list
99-
k.RemoveCertificateFromNocCertificateIndexes(ctx, certID, vid, true)
100-
} else {
101-
k.RemoveAllCertificatesBySerialNumber(ctx, cert.Subject, cert.SubjectKeyId, serialNumber)
102-
k.RemoveNocCertificatesBySerialNumber(ctx, cert.Subject, cert.SubjectKeyId, serialNumber)
103-
k.RemoveNocRootCertificateBySerialNumber(ctx, cert.Subject, cert.SubjectKeyId, vid, serialNumber)
104-
k.RemoveNocCertificatesByVidAndSkidBySerialNumber(ctx, vid, cert.Subject, cert.SubjectKeyId, serialNumber)
105-
k.RemoveNocCertificatesBySubjectKeyIDBySerialNumber(ctx, cert.Subject, cert.SubjectKeyId, serialNumber)
106-
}
83+
k.RemoveNocCertBySerialNumber(
84+
ctx,
85+
cert.Subject,
86+
cert.SubjectKeyId,
87+
&certificates,
88+
vid,
89+
serialNumber,
90+
cert.Issuer,
91+
true,
92+
)
10793

10894
return nil
10995
}
11096

111-
func (k msgServer) _revokeNocRootCertificates(ctx sdk.Context, certificates types.NocCertificates, vid int32) {
97+
func (k msgServer) revokeNocRootCertificate(ctx sdk.Context, certificates types.NocCertificates, vid int32) {
11298
// Add certs into revoked lists
11399
k.AddRevokedNocRootCertificates(ctx, types.RevokedNocRootCertificates{
114100
Subject: certificates.Subject,
115101
SubjectKeyId: certificates.SubjectKeyId,
116102
Certs: certificates.Certs,
117103
})
118-
119-
certID := types.CertificateIdentifier{
120-
Subject: certificates.Subject,
121-
SubjectKeyId: certificates.SubjectKeyId,
122-
}
123-
// Remove certificate from global list
124-
k.RemoveCertificateFromAllCertificateIndexes(ctx, certID)
125104
// Remove certificate from noc list
126-
k.RemoveCertificateFromNocCertificateIndexes(ctx, certID, vid, true)
105+
k.RemoveNocCertificate(ctx, certificates.Subject, certificates.SubjectKeyId, vid, true)
127106
}

‎x/pki/keeper/msg_server_revoke_x_509_cert.go

+33-28
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,12 @@ func (k msgServer) RevokeX509Cert(goCtx context.Context, msg *types.MsgRevokeX50
4141
}
4242

4343
if msg.SerialNumber != "" {
44-
certBySerialNumber, found := findCertificate(msg.SerialNumber, &certificates.Certs)
45-
if !found {
46-
return nil, pkitypes.NewErrCertificateBySerialNumberDoesNotExist(msg.Subject, msg.SubjectKeyId, msg.SerialNumber)
44+
err = k.revokeDaCertificateBySerialNumber(ctx, msg.SerialNumber, certificates)
45+
if err != nil {
46+
return nil, err
4747
}
48-
49-
k._revokeX509Certificate(ctx, certBySerialNumber, certIdentifier, certificates)
5048
} else {
51-
k._revokeX509Certificates(ctx, certIdentifier, certificates)
49+
k.revokeDaCertificate(ctx, certIdentifier, certificates)
5250
}
5351

5452
if msg.RevokeChild {
@@ -59,40 +57,47 @@ func (k msgServer) RevokeX509Cert(goCtx context.Context, msg *types.MsgRevokeX50
5957
return &types.MsgRevokeX509CertResponse{}, nil
6058
}
6159

62-
func (k msgServer) _revokeX509Certificates(ctx sdk.Context, certID types.CertificateIdentifier, certificates types.ApprovedCertificates) {
60+
func (k msgServer) revokeDaCertificate(ctx sdk.Context, certID types.CertificateIdentifier, certificates types.ApprovedCertificates) {
6361
// Revoke certificates with given subject/subjectKeyID
6462
k.AddRevokedCertificates(ctx, types.RevokedCertificates(certificates))
65-
66-
// Remove certificate from global list
67-
k.RemoveCertificateFromAllCertificateIndexes(ctx, certID)
68-
6963
// Remove certificate from da list
70-
k.RemoveCertificateFromDaCertificateIndexes(ctx, certID, false)
71-
64+
k.RemoveDaCertificate(ctx, certID.Subject, certID.SubjectKeyId, false)
7265
// Remove certificate identifier from issuer's ChildCertificates record
7366
k.RemoveChildCertificate(ctx, certificates.Certs[0].Issuer, certificates.Certs[0].AuthorityKeyId, certID)
7467
}
7568

76-
func (k msgServer) _revokeX509Certificate(ctx sdk.Context, cert *types.Certificate, certID types.CertificateIdentifier, certificates types.ApprovedCertificates) {
77-
revCerts := types.RevokedCertificates{
69+
func (k msgServer) revokeDaCertificateBySerialNumber(
70+
ctx sdk.Context,
71+
serialNumber string,
72+
certificates types.ApprovedCertificates,
73+
) error {
74+
cert, found := FindCertificateInList(serialNumber, &certificates.Certs)
75+
if !found {
76+
return pkitypes.NewErrCertificateBySerialNumberDoesNotExist(certificates.Subject, certificates.SubjectKeyId, serialNumber)
77+
}
78+
79+
k.AddRevokedCertificates(ctx, types.RevokedCertificates{
7880
Subject: cert.Subject,
7981
SubjectKeyId: cert.SubjectKeyId,
8082
Certs: []*types.Certificate{cert},
8183
SchemaVersion: cert.SchemaVersion,
82-
}
83-
k.AddRevokedCertificates(ctx, revCerts)
84+
})
85+
86+
k.RemoveDaCertificateBySerialNumber(
87+
ctx,
88+
certificates.Subject,
89+
certificates.SubjectKeyId,
90+
&certificates,
91+
cert.SerialNumber,
92+
cert.Issuer,
93+
)
8494

85-
removeCertFromList(cert.Issuer, cert.SerialNumber, &certificates.Certs)
8695
if len(certificates.Certs) == 0 {
87-
k.RemoveAllCertificates(ctx, cert.Subject, cert.SubjectKeyId)
88-
k.RemoveAllCertificateBySubject(ctx, cert.Subject, cert.SubjectKeyId)
89-
k.RemoveApprovedCertificates(ctx, cert.Subject, cert.SubjectKeyId)
90-
k.RemoveApprovedCertificateBySubject(ctx, cert.Subject, cert.SubjectKeyId)
91-
k.RemoveApprovedCertificatesBySubjectKeyID(ctx, cert.Subject, cert.SubjectKeyId)
92-
k.RemoveChildCertificate(ctx, cert.Issuer, cert.AuthorityKeyId, certID)
93-
} else {
94-
k.RemoveAllCertificatesBySerialNumber(ctx, cert.Subject, cert.SubjectKeyId, cert.SerialNumber)
95-
k.RemoveApprovedCertificatesBySerialNumber(ctx, cert.Subject, cert.SubjectKeyId, cert.SerialNumber)
96-
k.RemoveApprovedCertificatesBySubjectKeyIDBySerialNumber(ctx, cert.Subject, cert.SubjectKeyId, cert.SerialNumber)
96+
k.RemoveChildCertificate(ctx, cert.Issuer, cert.AuthorityKeyId, types.CertificateIdentifier{
97+
Subject: certificates.Subject,
98+
SubjectKeyId: certificates.SubjectKeyId,
99+
})
97100
}
101+
102+
return nil
98103
}

‎x/pki/keeper/noc_certificates_by_vid_and_skid.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ func (k Keeper) _filterAndSetNocCertificateByVidAndSkid(
120120
predicate CertificatePredicate,
121121
) {
122122
nocCertificates, _ := k.GetNocCertificatesByVidAndSkid(ctx, vid, subjectKeyID)
123-
filteredCertificates := filterCertificates(&nocCertificates.Certs, predicate)
123+
filteredCertificates := FilterCertificateList(&nocCertificates.Certs, predicate)
124124

125125
if len(filteredCertificates) > 0 {
126126
nocCertificates.Certs = filteredCertificates

‎x/pki/keeper/revoked_certificates.go

+6-2
Original file line numberDiff line numberDiff line change
@@ -96,9 +96,13 @@ func (k Keeper) AddRevokedCertificates(ctx sdk.Context, approvedCertificates typ
9696
), b)
9797
}
9898

99-
func (k msgServer) removeOrUpdateRevokedX509Cert(ctx sdk.Context, certID types.CertificateIdentifier, certificates *types.RevokedCertificates) {
99+
func (k msgServer) removeOrUpdateRevokedX509Cert(
100+
ctx sdk.Context,
101+
subject string,
102+
subjectKeyID string,
103+
certificates *types.RevokedCertificates) {
100104
if len(certificates.Certs) == 0 {
101-
k.RemoveRevokedCertificates(ctx, certID.Subject, certID.SubjectKeyId)
105+
k.RemoveRevokedCertificates(ctx, subject, subjectKeyID)
102106
} else {
103107
k.SetRevokedCertificates(
104108
ctx,

‎x/pki/keeper/unique_certificate.go

+11
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
sdk "github.com/cosmos/cosmos-sdk/types"
66
pkitypes "github.com/zigbee-alliance/distributed-compliance-ledger/types/pki"
77
"github.com/zigbee-alliance/distributed-compliance-ledger/x/pki/types"
8+
"github.com/zigbee-alliance/distributed-compliance-ledger/x/pki/x509"
89
)
910

1011
// SetUniqueCertificate set a specific uniqueCertificate in the store from its index.
@@ -17,6 +18,16 @@ func (k Keeper) SetUniqueCertificate(ctx sdk.Context, uniqueCertificate types.Un
1718
), b)
1819
}
1920

21+
// SetUniqueX509Certificate set a specific x509 certificate in the store from its index.
22+
func (k Keeper) SetUniqueX509Certificate(ctx sdk.Context, x509Certificate *x509.Certificate) {
23+
uniqueCertificate := types.UniqueCertificate{
24+
Issuer: x509Certificate.Issuer,
25+
SerialNumber: x509Certificate.SerialNumber,
26+
Present: true,
27+
}
28+
k.SetUniqueCertificate(ctx, uniqueCertificate)
29+
}
30+
2031
// GetUniqueCertificate returns a uniqueCertificate from its index.
2132
func (k Keeper) GetUniqueCertificate(
2233
ctx sdk.Context,

0 commit comments

Comments
 (0)
Please sign in to comment.