Skip to content

Commit 7c3bd26

Browse files
committed
Added index for all certificates by subject key id
1 parent f2c4fd6 commit 7c3bd26

34 files changed

+1283
-257
lines changed

integration_tests/cli/pki-combine-certs.sh

+35
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,41 @@ response_does_not_contain "$result" "\"subjectKeyId\": \"$da_root_subject_key_id
283283

284284
test_divider
285285

286+
echo "Request certificates by subject key id"
287+
echo "Request DA certificate using global command"
288+
result=$(dcld query pki certs --subject-key-id="$da_root_subject_key_id")
289+
echo $result | jq
290+
check_response "$result" "\"subjectKeyId\": \"$da_root_subject_key_id\""
291+
292+
echo "Request NOC certificate using global command"
293+
result=$(dcld query pki certs --subject-key-id="$noc_root_subject_key_id")
294+
echo $result | jq
295+
check_response "$result" "\"subjectKeyId\": \"$noc_root_subject_key_id\""
296+
297+
echo "Request DA certificate"
298+
result=$(dcld query pki x509-cert --subject-key-id="$da_root_subject_key_id")
299+
echo $result | jq
300+
check_response "$result" "\"subjectKeyId\": \"$da_root_subject_key_id\""
301+
302+
echo "Request NOC certificate using DA command (must be empty)"
303+
result=$(dcld query pki x509-cert --subject="$noc_root_subject" --subject-key-id="$noc_root_subject_key_id")
304+
echo $result | jq
305+
check_response "$result" "Not Found"
306+
response_does_not_contain "$result" "\"subjectKeyId\": \"$noc_root_subject_key_id\""
307+
308+
echo "Request NOC Root certificate"
309+
result=$(dcld query pki noc-x509-cert --subject="$noc_root_subject" --subject-key-id="$noc_root_subject_key_id")
310+
echo $result | jq
311+
check_response "$result" "\"subjectKeyId\": \"$noc_root_subject_key_id\""
312+
313+
echo "Request DA certificate using NOC command (must be empty)"
314+
result=$(dcld query pki noc-x509-cert --subject="$da_root_subject" --subject-key-id="$da_root_subject_key_id")
315+
echo $result | jq
316+
check_response "$result" "Not Found"
317+
response_does_not_contain "$result" "\"subjectKeyId\": \"$da_root_subject_key_id\""
318+
319+
test_divider
320+
286321
echo "Request DA certificates by subject using global command"
287322
result=$(dcld query pki all-subject-certs --subject=$da_root_subject)
288323
echo $result | jq

integration_tests/upgrade/04-test-upgrade-1.4.3-to-1.4.4.sh

+23-1
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,21 @@ result=$(dcld query pki noc-x509-cert --subject="$noc_root_cert_1_subject_for_1_
493493
check_response "$result" "Not Found"
494494

495495
echo "Get all x509 certificates by subjectKeyId"
496+
result=$($DCLD_BIN_NEW query pki cert --subject-key-id="$root_cert_with_vid_subject_key_id_for_1_4_3")
497+
check_response "$result" "$root_cert_with_vid_subject_for_1_4_3"
498+
check_response "$result" "\"subjectKeyId\": \"$root_cert_with_vid_subject_key_id_for_1_4_3\""
499+
500+
result=$($DCLD_BIN_NEW query pki cert --subject-key-id="$test_root_cert_subject_key_id_for_1_2")
501+
check_response "$result" "$test_root_cert_subject_for_1_2"
502+
check_response "$result" "\"subjectKeyId\": \"$test_root_cert_subject_key_id_for_1_2\""
503+
504+
result=$($DCLD_BIN_NEW query pki cert --subject-key-id="$test_root_cert_subject_key_id")
505+
check_response "$result" "$test_root_cert_subject"
506+
check_response "$result" "\"subjectKeyId\": \"$test_root_cert_subject_key_id\""
507+
508+
result=$($DCLD_BIN_NEW query pki cert --subject-key-id="$noc_root_cert_1_subject_key_id_for_1_4_3")
509+
check_response "$result" "Not Found"
510+
496511
result=$($DCLD_BIN_NEW query pki x509-cert --subject-key-id="$root_cert_with_vid_subject_key_id_for_1_4_3")
497512
check_response "$result" "$root_cert_with_vid_subject_for_1_4_3"
498513
check_response "$result" "\"subjectKeyId\": \"$root_cert_with_vid_subject_key_id_for_1_4_3\""
@@ -1490,11 +1505,18 @@ check_response "$result" "Not Found"
14901505

14911506
echo "Get all certificates by SKID"
14921507

1508+
echo "Get all certificates by SKID (Global)"
1509+
result=$($DCLD_BIN_NEW query pki cert --subject-key-id=$da_root_cert_2_subject_key_id_for_1_4_4)
1510+
check_response "$result" "\"subjectKeyId\": \"$da_root_cert_2_subject_key_id_for_1_4_4\""
1511+
1512+
result=$($DCLD_BIN_NEW query pki cert --subject-key-id=$noc_root_cert_2_subject_key_id_for_1_4_4)
1513+
check_response "$result" "\"subjectKeyId\": \"$noc_root_cert_2_subject_for_1_4_4\""
1514+
14931515
echo "Get all certificates by SKID (DA)"
14941516
result=$($DCLD_BIN_NEW query pki x509-cert --subject-key-id=$da_root_cert_2_subject_key_id_for_1_4_4)
14951517
check_response "$result" "\"subjectKeyId\": \"$da_root_cert_2_subject_key_id_for_1_4_4\""
14961518

1497-
result=$($DCLD_BIN_NEW query pki x509-cert --subject-key-id=$noc_root_cert_2_subject_for_1_4_4)
1519+
result=$($DCLD_BIN_NEW query pki x509-cert --subject-key-id=$noc_root_cert_2_subject_key_id_for_1_4_4)
14981520
check_response "$result" "Not Found"
14991521

15001522
echo "Get all certificates by SKID (NOC)"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
syntax = "proto3";
2+
package zigbeealliance.distributedcomplianceledger.pki;
3+
4+
option go_package = "github.com/zigbee-alliance/distributed-compliance-ledger/x/pki/types";
5+
6+
import "zigbeealliance/distributedcomplianceledger/pki/certificate.proto";
7+
8+
message AllCertificatesBySubjectKeyId {
9+
string subjectKeyId = 1;
10+
repeated Certificate certs = 2;
11+
uint32 schemaVersion = 3;
12+
13+
}
14+

proto/zigbeealliance/distributedcomplianceledger/pki/genesis.proto

+3
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ import "zigbeealliance/distributedcomplianceledger/pki/noc_certificates_by_vid_a
2424
import "zigbeealliance/distributedcomplianceledger/pki/noc_certificates_by_subject.proto";
2525
import "zigbeealliance/distributedcomplianceledger/pki/all_certificates.proto";
2626
import "zigbeealliance/distributedcomplianceledger/pki/all_certificates_by_subject.proto";
27+
import "zigbeealliance/distributedcomplianceledger/pki/all_certificates_by_subject_key_id.proto";
28+
2729
// this line is used by starport scaffolding # genesis/proto/import
2830
import "gogoproto/gogo.proto";
2931

@@ -54,5 +56,6 @@ message GenesisState {
5456
repeated AllCertificates certificatesList = 21 [(gogoproto.nullable) = false];
5557
repeated RevokedNocIcaCertificates revokedNocIcaCertificatesList = 22 [(gogoproto.nullable) = false];
5658
repeated AllCertificatesBySubject allCertificatesBySubjectList = 23 [(gogoproto.nullable) = false];
59+
repeated AllCertificatesBySubjectKeyId allCertificatesBySubjectKeyIdList = 24 [(gogoproto.nullable) = false];
5760
// this line is used by starport scaffolding # genesis/proto/state
5861
}

proto/zigbeealliance/distributedcomplianceledger/pki/query.proto

+1
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ service Query {
197197

198198
message QueryAllCertificatesRequest {
199199
cosmos.base.query.v1beta1.PageRequest pagination = 1;
200+
string subjectKeyId = 2;
200201
}
201202

202203
message QueryAllCertificatesResponse {

x/pki/client/cli/query_all_certificates.go

+15-4
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ func CmdShowCertificates() *cobra.Command {
5858

5959
cmd := &cobra.Command{
6060
Use: "cert",
61-
Short: "Gets certificate by the given combination of subject and subject-key-id. " +
61+
Short: "Gets certificate by the given combination of subject and subject-key-id or just subject-key-id. " +
6262
"This query works for all types of certificates (PAA, PAI, RCAC, ICAC).",
6363
Args: cobra.ExactArgs(0),
6464
RunE: func(cmd *cobra.Command, args []string) (err error) {
@@ -67,13 +67,24 @@ func CmdShowCertificates() *cobra.Command {
6767
return err
6868
}
6969

70-
var res types.AllCertificates
70+
if subject != "" {
71+
var res types.AllCertificates
72+
73+
return cli.QueryWithProof(
74+
clientCtx,
75+
pkitypes.StoreKey,
76+
types.AllCertificatesKeyPrefix,
77+
types.AllCertificatesKey(subject, subjectKeyID),
78+
&res,
79+
)
80+
}
81+
var res types.AllCertificatesBySubjectKeyId
7182

7283
return cli.QueryWithProof(
7384
clientCtx,
7485
pkitypes.StoreKey,
75-
types.AllCertificatesKeyPrefix,
76-
types.AllCertificatesKey(subject, subjectKeyID),
86+
types.AllCertificatesBySubjectKeyIDKeyPrefix,
87+
types.AllCertificatesBySubjectKeyIDKey(subjectKeyID),
7788
&res,
7889
)
7990
},

x/pki/genesis.go

+4
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,9 @@ func InitGenesis(ctx sdk.Context, k keeper.Keeper, genState types.GenesisState)
101101
for _, elem := range genState.AllCertificatesBySubjectList {
102102
k.SetAllCertificatesBySubject(ctx, elem)
103103
}
104+
for _, elem := range genState.AllCertificatesBySubjectKeyIdList {
105+
k.SetAllCertificatesBySubjectKeyID(ctx, elem)
106+
}
104107
// this line is used by starport scaffolding # genesis/module/init
105108
}
106109

@@ -139,6 +142,7 @@ func ExportGenesis(ctx sdk.Context, k keeper.Keeper) *types.GenesisState {
139142
genesis.CertificatesList = k.GetAllAllCertificates(ctx)
140143
genesis.RevokedNocIcaCertificatesList = k.GetAllRevokedNocIcaCertificates(ctx)
141144
genesis.AllCertificatesBySubjectList = k.GetAllAllCertificatesBySubject(ctx)
145+
genesis.AllCertificatesBySubjectKeyIdList = k.GetAllAllCertificatesBySubjectKeyID(ctx)
142146
// this line is used by starport scaffolding # genesis/module/export
143147

144148
return genesis

x/pki/genesis_test.go

+10
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,14 @@ func TestGenesis(t *testing.T) {
224224
Subject: "1",
225225
},
226226
},
227+
AllCertificatesBySubjectKeyIdList: []types.AllCertificatesBySubjectKeyId{
228+
{
229+
SubjectKeyId: "0",
230+
},
231+
{
232+
SubjectKeyId: "1",
233+
},
234+
},
227235
// this line is used by starport scaffolding # genesis/test/state
228236
}
229237

@@ -255,5 +263,7 @@ func TestGenesis(t *testing.T) {
255263
require.ElementsMatch(t, genesisState.CertificatesList, got.CertificatesList)
256264
require.ElementsMatch(t, genesisState.RevokedNocIcaCertificatesList, got.RevokedNocIcaCertificatesList)
257265
require.ElementsMatch(t, genesisState.AllCertificatesBySubjectList, got.AllCertificatesBySubjectList)
266+
require.ElementsMatch(t, genesisState.AllCertificatesBySubjectKeyIdList, got.AllCertificatesBySubjectKeyIdList)
267+
require.ElementsMatch(t, genesisState.AllCertificatesBySubjectKeyIdList, got.AllCertificatesBySubjectKeyIdList)
258268
// this line is used by starport scaffolding # genesis/test/assert
259269
}

x/pki/handler_test.go

+43-11
Original file line numberDiff line numberDiff line change
@@ -225,14 +225,14 @@ func queryProposedCertificate(
225225
return &resp.ProposedCertificate, nil
226226
}
227227

228-
func queryAllApprovedCertificates(setup *TestSetup) ([]types.ApprovedCertificates, error) {
228+
func queryAllNocCertificates(setup *TestSetup) ([]types.NocCertificates, error) {
229229
// query all certificates
230-
return _queryAllApprovedCertificates(setup, "")
230+
return _queryAllNocCertificates(setup, "")
231231
}
232232

233-
func queryAllNocCertificates(setup *TestSetup) ([]types.NocCertificates, error) {
233+
func queryAllApprovedCertificates(setup *TestSetup) ([]types.ApprovedCertificates, error) {
234234
// query all certificates
235-
return _queryAllNocCertificates(setup, "")
235+
return _queryAllApprovedCertificates(setup, "")
236236
}
237237

238238
func queryAllApprovedCertificatesBySubjectKeyID(setup *TestSetup, subjectKeyID string) ([]types.ApprovedCertificates, error) {
@@ -772,6 +772,29 @@ func queryRevokedNocIcaCertificates(setup *TestSetup, subject, subjectKeyID stri
772772
return &resp.RevokedNocIcaCertificates, nil
773773
}
774774

775+
func queryAllCertificatesBySubjectKeyID(setup *TestSetup, subjectKeyID string) ([]types.AllCertificates, error) {
776+
// query all certificates
777+
return _queryAllCertificates(setup, subjectKeyID)
778+
}
779+
780+
func _queryAllCertificates(setup *TestSetup, subjectKeyID string) ([]types.AllCertificates, error) {
781+
// query all certificates
782+
req := &types.QueryAllCertificatesRequest{
783+
SubjectKeyId: subjectKeyID,
784+
}
785+
786+
resp, err := setup.Keeper.CertificatesAll(setup.Wctx, req)
787+
if err != nil {
788+
require.Nil(setup.T, resp)
789+
790+
return nil, err
791+
}
792+
793+
require.NotNil(setup.T, resp)
794+
795+
return resp.Certificates, nil
796+
}
797+
775798
func queryCertificatesFromAllCertificatesIndex(
776799
setup *TestSetup,
777800
subject string,
@@ -897,11 +920,16 @@ func ensureCertificatePresentInGlobalCertificateIndexes(
897920
require.Equal(t, subjectKeyID, allCertificate.SubjectKeyId)
898921
require.Equal(t, serialNumber, allCertificate.SerialNumber)
899922

923+
// AllCertificate: SKID
924+
certificateBySubjectKeyID, _ := queryAllCertificatesBySubjectKeyID(setup, subjectKeyID)
925+
require.Len(t, certificateBySubjectKeyID, 1)
926+
require.Len(t, certificateBySubjectKeyID[0].Certs, 1)
927+
900928
if !skipCheckForSubject {
901929
// AllCertificate: Subject
902930
allCertificatesBySubject, err := queryCertificatesBySubjectFromAllCertificatesIndex(setup, subject)
903931
require.NoError(t, err)
904-
require.Len(t, 1, len(allCertificatesBySubject.SubjectKeyIds))
932+
require.Len(t, allCertificatesBySubject.SubjectKeyIds, 1)
905933
require.Equal(t, subjectKeyID, allCertificatesBySubject.SubjectKeyIds[0])
906934
}
907935
}
@@ -921,6 +949,10 @@ func ensureCertificateNotPresentInGlobalCertificateIndexes(
921949
_, err := querySingleCertificateFromAllCertificatesIndex(setup, subject, subjectKeyID)
922950
require.Equal(t, codes.NotFound, status.Code(err))
923951

952+
// DaCertificates: SubjectKeyID
953+
certificatesBySubjectKeyID, _ := queryAllCertificatesBySubjectKeyID(setup, subjectKeyID)
954+
require.Empty(t, certificatesBySubjectKeyID)
955+
924956
if !skipCheckForSubject {
925957
// AllCertificate: Subject
926958
_, err = queryCertificatesBySubjectFromAllCertificatesIndex(setup, subject)
@@ -948,14 +980,14 @@ func ensureCertificatePresentInDaCertificateIndexes(
948980

949981
// DaCertificates: SKID
950982
certificateBySubjectKeyID, _ := queryAllApprovedCertificatesBySubjectKeyID(setup, subjectKeyID)
951-
require.Len(t, 1, len(certificateBySubjectKeyID))
952-
require.Len(t, 1, len(certificateBySubjectKeyID[0].Certs))
983+
require.Len(t, certificateBySubjectKeyID, 1)
984+
require.Len(t, certificateBySubjectKeyID[0].Certs, 1)
953985

954986
if !skipCheckForSubject {
955987
// DACertificates: Subject
956988
certificatesBySubject, err := queryApprovedCertificatesBySubject(setup, subject)
957989
require.NoError(t, err)
958-
require.Len(t, 1, len(certificatesBySubject.SubjectKeyIds))
990+
require.Len(t, certificatesBySubject.SubjectKeyIds, 1)
959991
require.Equal(t, subjectKeyID, certificatesBySubject.SubjectKeyIds[0])
960992
}
961993
}
@@ -985,14 +1017,14 @@ func ensureCertificatePresentInNocCertificateIndexes(
9851017
// NocCertificates: SubjectKeyID
9861018
nocCertificatesBySubjectKeyID, err := queryAllNocCertificatesBySubjectKeyID(setup, subjectKeyID)
9871019
require.NoError(t, err)
988-
require.Len(t, 1, len(nocCertificatesBySubjectKeyID))
989-
require.Len(t, 1, len(nocCertificatesBySubjectKeyID[0].Certs))
1020+
require.Len(t, nocCertificatesBySubjectKeyID, 1)
1021+
require.Len(t, nocCertificatesBySubjectKeyID[0].Certs, 1)
9901022
require.Equal(t, serialNumber, nocCertificatesBySubjectKeyID[0].Certs[0].SerialNumber)
9911023

9921024
// NocCertificates: Subject
9931025
nocCertificatesBySubject, err := queryNocCertificatesBySubject(setup, subject)
9941026
require.NoError(t, err)
995-
require.Len(t, 1, len(nocCertificatesBySubject.SubjectKeyIds))
1027+
require.Len(t, nocCertificatesBySubject.SubjectKeyIds, 1)
9961028
require.Equal(t, subjectKeyID, nocCertificatesBySubject.SubjectKeyIds[0])
9971029

9981030
// NocCertificates: VID and SKID

0 commit comments

Comments
 (0)