Skip to content

Commit eb57a5a

Browse files
committed
#535 VID scoped x509 certificates
- Enable checking of VID Scoping while adding X509 certificates Signed-off-by: Abdulbois <abdulbois.tursunov@dsr-corporation.com> Signed-off-by: Abdulbois <abdulbois123@gmail.com>
1 parent f05b02e commit eb57a5a

File tree

11 files changed

+339
-17
lines changed

11 files changed

+339
-17
lines changed

integration_tests/constants/constants.go

+73-2
Original file line numberDiff line numberDiff line change
@@ -315,8 +315,11 @@ CU3r1RXsbs8zuBEVIl8yUogwHwYDVR0jBBgwFoAUav0idx9RH+y/FkGXZxDc3DGh
315315
cX4wCgYIKoZIzj0EAwIDSAAwRQIhAJbJyM8uAYhgBdj1vHLAe3X9mldpWsSRETET
316316
i+oDPOUDAiAlVJQ75X1T1sR199I+v8/CA2zSm6Y5PsfvrYcUq3GCGQ==
317317
-----END CERTIFICATE-----`
318-
PAICertWithNumericPidVidVid = 65521
319-
PAICertWithNumericPidVidPid = 32768
318+
319+
PAICertWithNumericPidVidSubject = "MEYxGDAWBgNVBAMMD01hdHRlciBUZXN0IFBBSTEUMBIGCisGAQQBgqJ8AgEMBEZGRjExFDASBgorBgEEAYKifAICDAQ4MDAw"
320+
PAICertWithNumericPidVidSubjectKeyID = "AF:42:B7:09:4D:EB:D5:15:EC:6E:CF:33:B8:11:15:22:5F:32:52:88"
321+
PAICertWithNumericPidVidVid = 65521
322+
PAICertWithNumericPidVidPid = 32768
320323

321324
PAICertWithPidVid = `
322325
-----BEGIN CERTIFICATE-----
@@ -346,6 +349,9 @@ Q+ppaILVMAoGCCqGSM49BAMCA0gAMEUCIQDfwJ3oS/qVbWDW/vTirREL3iIqMogw
346349
pn4/F7keUYUaeAIgce2XGOSIsrjPlUQ1zj/zLqUFVhQ8TyycBaIK8z7Uytk=
347350
-----END CERTIFICATE-----`
348351

352+
PAICertWithNumericVidSubject = "MDAxGDAWBgNVBAMMD01hdHRlciBUZXN0IFBBSTEUMBIGCisGAQQBgqJ8AgEMBEZGRjI="
353+
PAICertWithNumericVidSubjectKeyID = "61:3D:D0:87:35:5E:F0:8B:AE:01:E4:C6:9A:8F:C7:3D:AC:8C:7D:FD"
354+
349355
PAICertWithVid = `-----BEGIN CERTIFICATE-----
350356
MIIBmzCCAUKgAwIBAgIIIt8JcSeGaqMwCgYIKoZIzj0EAwIwGjEYMBYGA1UEAwwP
351357
TWF0dGVyIFRlc3QgUEFBMCAXDTIxMDYyODE0MjM0M1oYDzk5OTkxMjMxMjM1OTU5
@@ -439,6 +445,7 @@ p6lc3hTEQsQZsUwVzH74wu+whWZdKHHrEY7rONc/QiLmwZl+w2nGs+S62z20GueU
439445
XSNIRw5NvAwLCvnog8A47MIqpuF211kdKvu2QFM/ekMvduL8BpkIFVKULSOY1t9d
440446
XPz2ZlXABob+/ovGOyGPDw/3tUmlBXU=
441447
-----END CERTIFICATE-----`
448+
442449
RootCertWithSameSubjectAndSKID2 = `-----BEGIN CERTIFICATE-----
443450
MIID0zCCArugAwIBAgIBAjANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCVVMx
444451
ETAPBgNVBAgMCE5ldyBZb3JrMREwDwYDVQQHDAhOZXcgWW9yazEYMBYGA1UECgwP
@@ -462,6 +469,7 @@ BQADggEBAENwaLKvyNz0IW1BNH2eTYNvgFl4f/I1pVYPOlA0O0ZB4BupqtgfKdTF
462469
XWQLy4RZmLIkrm7vj3uFWRpi7lOBkAPOgCm04RTYqJJwnI0UeJmvaxoFd42J+k3D
463470
xEsSrRoqMgkOX01+kkNn8Ugv3bEfeJ4=
464471
-----END CERTIFICATE-----`
472+
465473
IntermediateWithSameSubjectAndSKID1 = `-----BEGIN CERTIFICATE-----
466474
MIIDlTCCAn2gAwIBAgIBAzANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCVVMx
467475
ETAPBgNVBAgMCE5ldyBZb3JrMREwDwYDVQQHDAhOZXcgWW9yazEYMBYGA1UECgwP
@@ -484,6 +492,7 @@ xfBPUaspjiGALO8hBKlbVxt0RWv5MGyg2JJbSt9Ijexa6aoLzynq5gpSoEfQABUp
484492
wbfDZe4Cbio4ndASlsbtpo/5ZOuQKn9Wp54meOotFDrFntnD7XFohxMJc5YY0F1q
485493
Yk3FHd02VN0M
486494
-----END CERTIFICATE-----`
495+
487496
IntermediateWithSameSubjectAndSKID2 = `-----BEGIN CERTIFICATE-----
488497
MIIDlTCCAn2gAwIBAgIBBDANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCVVMx
489498
ETAPBgNVBAgMCE5ldyBZb3JrMREwDwYDVQQHDAhOZXcgWW9yazEYMBYGA1UECgwP
@@ -526,6 +535,57 @@ fjlqLDHoQ1UhBmEnocFTqd7QEZtUbRWPnlJw0ZK2uFK7IYmlnBKkewPCLVGI3ihx
526535
al/8sTx3xx7fWpS+rJ3jviCpHgP+cGV/ANg8hOlyr68u0FE+x6pye00TmxcFzDuo
527536
5/OA9jGQln82Z8inmc05wZPQPpjZxdCQteqJkNl7PrklgO5EevG9JlUArIets2Py
528537
2Vciq5eYOIi+PlP+HI5QzlZYxSqFjJrFcfzYCJ4=
538+
-----END CERTIFICATE-----`
539+
540+
RootCertWithVid = `-----BEGIN CERTIFICATE-----
541+
MIICdDCCAhmgAwIBAgIBATAKBggqhkjOPQQDAjCBmDELMAkGA1UEBhMCVVMxETAP
542+
BgNVBAgMCE5ldyBZb3JrMREwDwYDVQQHDAhOZXcgWW9yazEYMBYGA1UECgwPRXhh
543+
bXBsZSBDb21wYW55MRkwFwYDVQQLDBBUZXN0aW5nIERpdmlzaW9uMRgwFgYDVQQD
544+
DA93d3cuZXhhbXBsZS5jb20xFDASBgorBgEEAYKifAIBDARGRkYxMCAXDTI0MDIy
545+
NjExNTQzMVoYDzMwMjMwNjI5MTE1NDMxWjCBmDELMAkGA1UEBhMCVVMxETAPBgNV
546+
BAgMCE5ldyBZb3JrMREwDwYDVQQHDAhOZXcgWW9yazEYMBYGA1UECgwPRXhhbXBs
547+
ZSBDb21wYW55MRkwFwYDVQQLDBBUZXN0aW5nIERpdmlzaW9uMRgwFgYDVQQDDA93
548+
d3cuZXhhbXBsZS5jb20xFDASBgorBgEEAYKifAIBDARGRkYxMFkwEwYHKoZIzj0C
549+
AQYIKoZIzj0DAQcDQgAEDcguargOjH5nh4SCsflFk1ACqNBOR6Wua8huVYPBfse6
550+
uwfkgmyTJrCBCUAq9ayPD83jPVor1NN9YAx/V0zbsKNQME4wHQYDVR0OBBYEFM6o
551+
kmbq4IC9K7Vo5AsHxPosNG0xMB8GA1UdIwQYMBaAFM6okmbq4IC9K7Vo5AsHxPos
552+
NG0xMAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSQAwRgIhAOdYHo1krgzyV+CT
553+
G+RKcYoxHr6YS9ddNOJibjBx/I63AiEAxNl6kcOH0Rovwi2wySHvTD26kfUYJAmi
554+
HGBcCo5whZU=
555+
-----END CERTIFICATE-----`
556+
557+
IntermediateCertWithVid1 = `-----BEGIN CERTIFICATE-----
558+
MIICejCCAiGgAwIBAgIBAzAKBggqhkjOPQQDAjCBmDELMAkGA1UEBhMCVVMxETAP
559+
BgNVBAgMCE5ldyBZb3JrMREwDwYDVQQHDAhOZXcgWW9yazEYMBYGA1UECgwPRXhh
560+
bXBsZSBDb21wYW55MRkwFwYDVQQLDBBUZXN0aW5nIERpdmlzaW9uMRgwFgYDVQQD
561+
DA93d3cuZXhhbXBsZS5jb20xFDASBgorBgEEAYKifAIBDARGRkYxMCAXDTI0MDIy
562+
NjEyMDczMloYDzMwMjMwNjI5MTIwNzMyWjCBrjELMAkGA1UEBhMCVVMxETAPBgNV
563+
BAgMCE5ldyBZb3JrMREwDwYDVQQHDAhOZXcgWW9yazEYMBYGA1UECgwPRXhhbXBs
564+
ZSBDb21wYW55MRkwFwYDVQQLDBBUZXN0aW5nIERpdmlzaW9uMRgwFgYDVQQDDA93
565+
d3cuZXhhbXBsZS5jb20xFDASBgorBgEEAYKifAIBDARGRkYxMRQwEgYKKwYBBAGC
566+
onwCAgwERkZGMTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOTNh8u27CnRGdj0
567+
G0/z0oo9rsKcpgUogQ8fYYEg/QClYFHJuhFbf1M+VdeMScbllpt4kGH2ih7aU1b7
568+
1jRkVsyjQjBAMB0GA1UdDgQWBBQOjOjIuKpQvCWFVrmxnMLH2cUvFzAfBgNVHSME
569+
GDAWgBTOqJJm6uCAvSu1aOQLB8T6LDRtMTAKBggqhkjOPQQDAgNHADBEAiAOQSIQ
570+
sdClGJ86LQ1p7e+kb0Dg+YsyxIv2XHdUvIVn2gIgBkbzBccRbDG3p/+gnPhF+7xP
571+
T/SKbO+GZvoizizl6Gc=
572+
-----END CERTIFICATE-----`
573+
574+
IntermediateCertWithVid2 = `-----BEGIN CERTIFICATE-----
575+
MIICezCCAiGgAwIBAgIBBDAKBggqhkjOPQQDAjCBmDELMAkGA1UEBhMCVVMxETAP
576+
BgNVBAgMCE5ldyBZb3JrMREwDwYDVQQHDAhOZXcgWW9yazEYMBYGA1UECgwPRXhh
577+
bXBsZSBDb21wYW55MRkwFwYDVQQLDBBUZXN0aW5nIERpdmlzaW9uMRgwFgYDVQQD
578+
DA93d3cuZXhhbXBsZS5jb20xFDASBgorBgEEAYKifAIBDARGRkYxMCAXDTI0MDIy
579+
NjEzMDcwNVoYDzMwMjMwNjI5MTMwNzA1WjCBrjELMAkGA1UEBhMCVVMxETAPBgNV
580+
BAgMCE5ldyBZb3JrMREwDwYDVQQHDAhOZXcgWW9yazEYMBYGA1UECgwPRXhhbXBs
581+
ZSBDb21wYW55MRkwFwYDVQQLDBBUZXN0aW5nIERpdmlzaW9uMRgwFgYDVQQDDA93
582+
d3cuZXhhbXBsZS5jb20xFDASBgorBgEEAYKifAIBDARGRkYyMRQwEgYKKwYBBAGC
583+
onwCAgwERkZGMjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOTNh8u27CnRGdj0
584+
G0/z0oo9rsKcpgUogQ8fYYEg/QClYFHJuhFbf1M+VdeMScbllpt4kGH2ih7aU1b7
585+
1jRkVsyjQjBAMB0GA1UdDgQWBBQOjOjIuKpQvCWFVrmxnMLH2cUvFzAfBgNVHSME
586+
GDAWgBTOqJJm6uCAvSu1aOQLB8T6LDRtMTAKBggqhkjOPQQDAgNIADBFAiEAkApx
587+
PWFFDoptmYnsW1QhKqrcD+xmFgJA4SWTH5Q1efMCIDWqdG0sAgum+FphfM4HF6XV
588+
M6mDL6NurBAW1pJlg8OT
529589
-----END CERTIFICATE-----`
530590

531591
RootIssuer = "MDQxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApzb21lLXN0YXRlMRAwDgYDVQQKDAdyb290LWNh"
@@ -590,4 +650,15 @@ al/8sTx3xx7fWpS+rJ3jviCpHgP+cGV/ANg8hOlyr68u0FE+x6pye00TmxcFzDuo
590650
DataDigest = "9a5d2c1f4b3e6f8d7b1a0c9e2f5d8b7"
591651

592652
TestCertPemVid = 4701
653+
654+
RootCertWithVidSubject = "MIGYMQswCQYDVQQGEwJVUzERMA8GA1UECAwITmV3IFlvcmsxETAPBgNVBAcMCE5ldyBZb3JrMRgwFgYDVQQKDA9FeGFtcGxlIENvbXBhbnkxGTAXBgNVBAsMEFRlc3RpbmcgRGl2aXNpb24xGDAWBgNVBAMMD3d3dy5leGFtcGxlLmNvbTEUMBIGCisGAQQBgqJ8AgEMBEZGRjE="
655+
RootCertWithVidSubjectKeyID = "CE:A8:92:66:EA:E0:80:BD:2B:B5:68:E4:0B:07:C4:FA:2C:34:6D:31"
656+
RootCertWithVidVid = 65521
657+
658+
IntermediateCertWithVidSubject = "MIGuMQswCQYDVQQGEwJVUzERMA8GA1UECAwITmV3IFlvcmsxETAPBgNVBAcMCE5ldyBZb3JrMRgwFgYDVQQKDA9FeGFtcGxlIENvbXBhbnkxGTAXBgNVBAsMEFRlc3RpbmcgRGl2aXNpb24xGDAWBgNVBAMMD3d3dy5leGFtcGxlLmNvbTEUMBIGCisGAQQBgqJ8AgEMBEZGRjExFDASBgorBgEEAYKifAICDARGRkYx"
659+
IntermediateCertWithVidSubjectKeyID = "0E:8C:E8:C8:B8:AA:50:BC:25:85:56:B9:B1:9C:C2:C7:D9:C5:2F:17"
660+
IntermediateCertWithVid1SerialNumber = "3"
661+
IntermediateCertWithVid2SerialNumber = "4"
662+
IntermediateCertWithVid1Vid = 65521
663+
IntermediateCertWithVid2Vid = 65522
593664
)

integration_tests/grpc_rest/pki/helpers.go

+78
Original file line numberDiff line numberDiff line change
@@ -1983,4 +1983,82 @@ func Demo(suite *utils.TestSuite) {
19831983
suite.AssertNotFound(err)
19841984
_, err = GetX509Cert(suite, testconstants.LeafCertWithSameSubjectAndSKIDSubject, testconstants.LeafCertWithSameSubjectAndSKIDSubjectKeyID)
19851985
suite.AssertNotFound(err)
1986+
1987+
// Add VID scoped X509 certificate
1988+
1989+
// Check that if root cert is VID scoped and RootVID==CertVID==AccountVID then adding x509 should succeed
1990+
// Add root certificate
1991+
msgProposeAddX509RootCert = pkitypes.MsgProposeAddX509RootCert{
1992+
Cert: testconstants.RootCertWithVid,
1993+
Vid: testconstants.RootCertWithVidVid,
1994+
Signer: aliceAccount.Address,
1995+
}
1996+
_, err = suite.BuildAndBroadcastTx([]sdk.Msg{&msgProposeAddX509RootCert}, aliceName, aliceAccount)
1997+
require.NoError(suite.T, err)
1998+
1999+
msgApproveAddX509RootCert = pkitypes.MsgApproveAddX509RootCert{
2000+
Subject: testconstants.RootCertWithVidSubject,
2001+
SubjectKeyId: testconstants.RootCertWithVidSubjectKeyID,
2002+
Signer: jackAccount.Address,
2003+
}
2004+
_, err = suite.BuildAndBroadcastTx([]sdk.Msg{&msgApproveAddX509RootCert}, jackName, jackAccount)
2005+
require.NoError(suite.T, err)
2006+
2007+
// Add an intermediate certificate
2008+
msgAddX509Cert = pkitypes.MsgAddX509Cert{
2009+
Cert: testconstants.IntermediateCertWithVid1,
2010+
Signer: aliceAccount.Address,
2011+
}
2012+
_, err = suite.BuildAndBroadcastTx([]sdk.Msg{&msgAddX509Cert}, aliceName, aliceAccount)
2013+
require.NoError(suite.T, err)
2014+
2015+
// Check approved certificates
2016+
certs, _ = GetX509Cert(suite, testconstants.RootCertWithVidSubject, testconstants.RootCertWithVidSubjectKeyID)
2017+
require.Equal(suite.T, 1, len(certs.Certs))
2018+
certs, _ = GetX509Cert(suite, testconstants.IntermediateCertWithVidSubject, testconstants.IntermediateCertWithVidSubjectKeyID)
2019+
require.Equal(suite.T, 1, len(certs.Certs))
2020+
2021+
// Check that if root cert is VID scoped and rootVID != CertVID then adding an intermediate cert should fail
2022+
// Add an intermediate certificate
2023+
msgAddX509Cert = pkitypes.MsgAddX509Cert{
2024+
Cert: testconstants.IntermediateCertWithVid2,
2025+
Signer: aliceAccount.Address,
2026+
}
2027+
_, err = suite.BuildAndBroadcastTx([]sdk.Msg{&msgAddX509Cert}, aliceName, aliceAccount)
2028+
require.Error(suite.T, err)
2029+
2030+
// Check there is only one approved intermediate certificate
2031+
certs, _ = GetX509Cert(suite, testconstants.IntermediateCertWithVidSubject, testconstants.IntermediateCertWithVidSubjectKeyID)
2032+
require.Equal(suite.T, 1, len(certs.Certs))
2033+
require.Equal(suite.T, testconstants.IntermediateCertWithVid1SerialNumber, certs.Certs[0].SerialNumber)
2034+
2035+
// Check that if root cert is non-VID scoped and CertVID != AccountVID then adding an intermediate cert should fail
2036+
// Ensure that there is a non-VID root cert exists
2037+
certs, _ = GetX509Cert(suite, testconstants.PAACertNoVidSubject, testconstants.PAACertNoVidSubjectKeyID)
2038+
require.Equal(suite.T, 1, len(certs.Certs))
2039+
2040+
// Add an intermediate certificate
2041+
msgAddX509Cert = pkitypes.MsgAddX509Cert{
2042+
Cert: testconstants.PAICertWithNumericVid,
2043+
Signer: aliceAccount.Address,
2044+
}
2045+
// Try to submit txn with another Vendor
2046+
_, err = suite.BuildAndBroadcastTx([]sdk.Msg{&msgAddX509Cert}, vendorName, vendorAccount)
2047+
require.Error(suite.T, err)
2048+
2049+
// Check there is no an intermediate certificate
2050+
certs, _ = GetX509Cert(suite, testconstants.PAICertWithNumericVidSubject, testconstants.PAICertWithNumericVidSubjectKeyID)
2051+
require.Equal(suite.T, 0, len(certs.Certs))
2052+
2053+
// Check that if root cert is non-VID scoped and CertVID==AccountVID then adding x509 should succeed
2054+
// Add an intermediate certificate
2055+
msgAddX509Cert = pkitypes.MsgAddX509Cert{
2056+
Cert: testconstants.PAICertWithNumericVid,
2057+
Signer: aliceAccount.Address,
2058+
}
2059+
_, err = suite.BuildAndBroadcastTx([]sdk.Msg{&msgAddX509Cert}, aliceName, aliceAccount)
2060+
require.NoError(suite.T, err)
2061+
// Check there is only one approved intermediate certificate
2062+
certs, _ = GetX509Cert(suite, testconstants.PAICertWithNumericVidSubject, testconstants.PAICertWithNumericVidSubjectKeyID)
2063+
require.Equal(suite.T, 1, len(certs.Certs))
19862064
}

types/pki/errors.go

+23
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ var (
4848
ErrMessageVidNotEqualRootCertVid = sdkerrors.Register(ModuleName, 437, "Message vid is not equal to ledger's root certificate vid")
4949
ErrCertNotChainedBack = sdkerrors.Register(ModuleName, 438, "Certificate is not chained back to a root certificate on DCL")
5050
ErrCertVidNotEqualAccountVid = sdkerrors.Register(ModuleName, 439, "account's vid is not equal to ledger's certificate vid")
51+
ErrCertVidNotEqualToRootVid = sdkerrors.Register(ModuleName, 440, "certificate's vid is not equal to vid of root certificate ")
5152
)
5253

5354
func NewErrUnauthorizedRole(transactionName string, requiredRole types.AccountRole) error {
@@ -206,6 +207,28 @@ func NewErrExistingCertVidNotEqualAccountVid(subject string, subjectKeyID string
206207
subject, subjectKeyID, vid)
207208
}
208209

210+
func NewErrRootCertVidNotEqualToAccountVidOrCertVid(rootVID int32, accountVID int32, certVID int32) error {
211+
if rootVID != certVID {
212+
return sdkerrors.Wrapf(ErrCertVidNotEqualToRootVid,
213+
"Root certificate is VID scoped: An intermediate certificate must be also VID scoped to the same VID as a root one: "+
214+
"Root certificate's VID = %v, Certificate's VID = %v",
215+
rootVID, certVID)
216+
}
217+
218+
return sdkerrors.Wrapf(ErrCertVidNotEqualAccountVid,
219+
"Root certificate is VID scoped: "+
220+
"Only a Vendor associated with this VID can add an intermediate certificate: "+
221+
"Root certificate's VID = %v, Account VID = %v",
222+
rootVID, accountVID)
223+
}
224+
225+
func NewErrAccountVidNotEqualToCertVid(accountVID int32, certVID int32) error {
226+
return sdkerrors.Wrapf(ErrCertVidNotEqualAccountVid,
227+
"Intermediate certificate is VID scoped: Only a Vendor associated with this VID can add an intermediate certificate: "+
228+
"Account VID = %v, Certificate's VID = %v",
229+
accountVID, certVID)
230+
}
231+
209232
func NewErrCRLSignerCertificatePidNotEqualMsgPid(certificatePid int32, messagePid int32) error {
210233
return sdkerrors.Wrapf(
211234
ErrCRLSignerCertificatePidNotEqualMsgPid,

vue/src/store/generated/zigbee-alliance/distributed-compliance-ledger/zigbeealliance.distributedcomplianceledger.pki/module/types/pki/tx.ts

+1
Original file line numberDiff line numberDiff line change
@@ -2427,6 +2427,7 @@ export interface Msg {
24272427
AssignVid(request: MsgAssignVid): Promise<MsgAssignVidResponse>
24282428
AddNocX509RootCert(request: MsgAddNocX509RootCert): Promise<MsgAddNocX509RootCertResponse>
24292429
/** this line is used by starport scaffolding # proto/tx/rpc */
2430+
/** this line is used by starport scaffolding # proto/tx/rpc */
24302431
RemoveX509Cert(request: MsgRemoveX509Cert): Promise<MsgRemoveX509CertResponse>
24312432
}
24322433

x/pki/handler_test.go

+120
Original file line numberDiff line numberDiff line change
@@ -787,6 +787,126 @@ func TestHandler_AddX509Cert(t *testing.T) {
787787
}
788788
}
789789

790+
func TestHandler_AddX509Cert_RootVID_Equal_To_CertVID_And_AccountVID(t *testing.T) {
791+
setup := Setup(t)
792+
793+
// store root certificate
794+
rootCertOptions := createPAACertWithNumericVidOptions()
795+
proposeAndApproveRootCertificate(setup, setup.Trustee1, rootCertOptions)
796+
797+
accAddress := GenerateAccAddress()
798+
setup.AddAccount(accAddress, []dclauthtypes.AccountRole{dclauthtypes.Vendor}, testconstants.PAACertWithNumericVidVid)
799+
800+
// add x509 certificate
801+
addX509Cert := types.NewMsgAddX509Cert(accAddress.String(), testconstants.PAICertWithNumericPidVid)
802+
_, err := setup.Handler(setup.Ctx, addX509Cert)
803+
require.NoError(t, err)
804+
805+
// query certificate
806+
certs, _ := queryAllApprovedCertificates(setup)
807+
require.Equal(t, 2, len(certs))
808+
intermediateCerts, _ := queryApprovedCertificates(setup, testconstants.PAICertWithNumericPidVidSubject, testconstants.PAICertWithNumericPidVidSubjectKeyID)
809+
require.Equal(t, 1, len(intermediateCerts.Certs))
810+
require.Equal(t, testconstants.PAICertWithNumericPidVidSubject, intermediateCerts.Certs[0].Subject)
811+
require.Equal(t, testconstants.PAICertWithNumericPidVidSubjectKeyID, intermediateCerts.Certs[0].SubjectKeyId)
812+
}
813+
814+
func TestHandler_AddX509Cert_Non_VID_Scoped_Root__ChildVID_Equal_To_AccountVID(t *testing.T) {
815+
setup := Setup(t)
816+
// store root certificate
817+
rootCertOptions := &rootCertOptions{
818+
pemCert: testconstants.PAACertNoVid,
819+
info: testconstants.Info,
820+
subject: testconstants.PAACertNoVidSubject,
821+
subjectKeyID: testconstants.PAACertNoVidSubjectKeyID,
822+
}
823+
proposeAndApproveRootCertificate(setup, setup.Trustee1, rootCertOptions)
824+
825+
accAddress := GenerateAccAddress()
826+
setup.AddAccount(accAddress, []dclauthtypes.AccountRole{dclauthtypes.Vendor}, 65522)
827+
828+
// add x509 certificate
829+
addX509Cert := types.NewMsgAddX509Cert(accAddress.String(), testconstants.PAICertWithNumericVid)
830+
_, err := setup.Handler(setup.Ctx, addX509Cert)
831+
require.NoError(t, err)
832+
833+
// query certificate
834+
certs, _ := queryAllApprovedCertificates(setup)
835+
require.Equal(t, 2, len(certs))
836+
intermediateCerts, _ := queryApprovedCertificates(setup, testconstants.PAICertWithNumericVidSubject, testconstants.PAICertWithNumericVidSubjectKeyID)
837+
require.Equal(t, 1, len(intermediateCerts.Certs))
838+
require.Equal(t, testconstants.PAICertWithNumericVidSubject, intermediateCerts.Certs[0].Subject)
839+
require.Equal(t, testconstants.PAICertWithNumericVidSubjectKeyID, intermediateCerts.Certs[0].SubjectKeyId)
840+
}
841+
842+
func TestHandler_AddX509Cert_Root_VID_Does_Not_Equal_To_ChildVID(t *testing.T) {
843+
setup := Setup(t)
844+
845+
// store root certificate
846+
rootCertOptions := &rootCertOptions{
847+
pemCert: testconstants.RootCertWithVid,
848+
info: testconstants.Info,
849+
subject: testconstants.RootCertWithVidSubject,
850+
subjectKeyID: testconstants.RootCertWithVidSubjectKeyID,
851+
vid: testconstants.RootCertWithVidVid,
852+
}
853+
proposeAndApproveRootCertificate(setup, setup.Trustee1, rootCertOptions)
854+
855+
accAddress := GenerateAccAddress()
856+
setup.AddAccount(accAddress, []dclauthtypes.AccountRole{dclauthtypes.Vendor}, testconstants.RootCertWithVidVid)
857+
858+
// add x509 certificate
859+
addX509Cert := types.NewMsgAddX509Cert(accAddress.String(), testconstants.IntermediateCertWithVid2)
860+
_, err := setup.Handler(setup.Ctx, addX509Cert)
861+
require.Error(t, err)
862+
require.True(t, pkitypes.ErrCertVidNotEqualToRootVid.Is(err))
863+
}
864+
865+
func TestHandler_AddX509Cert_Root_VID_Does_Not_Equal_To_AccountVID(t *testing.T) {
866+
setup := Setup(t)
867+
868+
// store root certificate
869+
rootCertOptions := &rootCertOptions{
870+
pemCert: testconstants.RootCertWithVid,
871+
info: testconstants.Info,
872+
subject: testconstants.RootCertWithVidSubject,
873+
subjectKeyID: testconstants.RootCertWithVidSubjectKeyID,
874+
vid: testconstants.RootCertWithVidVid,
875+
}
876+
proposeAndApproveRootCertificate(setup, setup.Trustee1, rootCertOptions)
877+
878+
accAddress := GenerateAccAddress()
879+
setup.AddAccount(accAddress, []dclauthtypes.AccountRole{dclauthtypes.Vendor}, 1111)
880+
881+
// add x509 certificate
882+
addX509Cert := types.NewMsgAddX509Cert(accAddress.String(), testconstants.IntermediateCertWithVid1)
883+
_, err := setup.Handler(setup.Ctx, addX509Cert)
884+
require.Error(t, err)
885+
require.True(t, pkitypes.ErrCertVidNotEqualAccountVid.Is(err))
886+
}
887+
888+
func TestHandler_AddX509Cert_Non_Root_VID__Child_VID_Does_Not_Equal_To_AccountVID(t *testing.T) {
889+
setup := Setup(t)
890+
891+
// store root certificate
892+
rootCertOptions := &rootCertOptions{
893+
pemCert: testconstants.PAACertNoVid,
894+
info: testconstants.Info,
895+
subject: testconstants.PAACertNoVidSubject,
896+
subjectKeyID: testconstants.PAACertNoVidSubjectKeyID,
897+
}
898+
proposeAndApproveRootCertificate(setup, setup.Trustee1, rootCertOptions)
899+
900+
accAddress := GenerateAccAddress()
901+
setup.AddAccount(accAddress, []dclauthtypes.AccountRole{dclauthtypes.Vendor}, 1111)
902+
903+
// add x509 certificate
904+
addX509Cert := types.NewMsgAddX509Cert(accAddress.String(), testconstants.PAICertWithNumericVid)
905+
_, err := setup.Handler(setup.Ctx, addX509Cert)
906+
require.Error(t, err)
907+
require.True(t, pkitypes.ErrCertVidNotEqualAccountVid.Is(err))
908+
}
909+
790910
func TestHandler_AddX509Cert_ForInvalidCertificate(t *testing.T) {
791911
setup := Setup(t)
792912

0 commit comments

Comments
 (0)