4
4
"bytes"
5
5
"context"
6
6
"crypto"
7
- "crypto/dsa" //nolint
7
+ "crypto/dsa" //nolint:staticcheck // support legacy algorithms
8
8
"crypto/ecdsa"
9
9
"crypto/ed25519"
10
10
"crypto/elliptic"
@@ -28,7 +28,9 @@ import (
28
28
29
29
"github.com/go-chi/chi"
30
30
"github.com/pkg/errors"
31
+ sassert "github.com/stretchr/testify/assert"
31
32
"golang.org/x/crypto/ssh"
33
+ squarejose "gopkg.in/square/go-jose.v2"
32
34
33
35
"go.step.sm/crypto/jose"
34
36
"go.step.sm/crypto/x509util"
@@ -1564,3 +1566,94 @@ func mustCertificate(t *testing.T, pub, priv interface{}) *x509.Certificate {
1564
1566
}
1565
1567
return cert
1566
1568
}
1569
+
1570
+ func TestProvisionersResponse_MarshalJSON (t * testing.T ) {
1571
+
1572
+ k := map [string ]any {
1573
+ "use" : "sig" ,
1574
+ "kty" : "EC" ,
1575
+ "kid" : "4UELJx8e0aS9m0CH3fZ0EB7D5aUPICb759zALHFejvc" ,
1576
+ "crv" : "P-256" ,
1577
+ "alg" : "ES256" ,
1578
+ "x" : "7ZdAAMZCFU4XwgblI5RfZouBi8lYmF6DlZusNNnsbm8" ,
1579
+ "y" : "sQr2JdzwD2fgyrymBEXWsxDxFNjjqN64qLLSbLdLZ9Y" ,
1580
+ }
1581
+ key := squarejose.JSONWebKey {}
1582
+ b , err := json .Marshal (k )
1583
+ assert .FatalError (t , err )
1584
+ err = json .Unmarshal (b , & key )
1585
+ assert .FatalError (t , err )
1586
+
1587
+ r := ProvisionersResponse {
1588
+ Provisioners : provisioner.List {
1589
+ & provisioner.SCEP {
1590
+ Name : "scep" ,
1591
+ Type : "scep" ,
1592
+ ChallengePassword : "not-so-secret" ,
1593
+ MinimumPublicKeyLength : 2048 ,
1594
+ EncryptionAlgorithmIdentifier : 2 ,
1595
+ },
1596
+ & provisioner.JWK {
1597
+ EncryptedKey : "eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJlbmMiOiJBMTI4R0NNIiwicDJjIjoxMDAwMDAsInAycyI6IlhOdmYxQjgxSUlLMFA2NUkwcmtGTGcifQ.XaN9zcPQeWt49zchUDm34FECUTHfQTn_.tmNHPQDqR3ebsWfd.9WZr3YVdeOyJh36vvx0VlRtluhvYp4K7jJ1KGDr1qypwZ3ziBVSNbYYQ71du7fTtrnfG1wgGTVR39tWSzBU-zwQ5hdV3rpMAaEbod5zeW6SHd95H3Bvcb43YiiqJFNL5sGZzFb7FqzVmpsZ1efiv6sZaGDHtnCAL6r12UG5EZuqGfM0jGCZitUz2m9TUKXJL5DJ7MOYbFfkCEsUBPDm_TInliSVn2kMJhFa0VOe5wZk5YOuYM3lNYW64HGtbf-llN2Xk-4O9TfeSPizBx9ZqGpeu8pz13efUDT2WL9tWo6-0UE-CrG0bScm8lFTncTkHcu49_a5NaUBkYlBjEiw.thPcx3t1AUcWuEygXIY3Fg" ,
1598
+ Key : & key ,
1599
+ Name : "step-cli" ,
1600
+ Type : "JWK" ,
1601
+ },
1602
+ },
1603
+ NextCursor : "next" ,
1604
+ }
1605
+
1606
+ expected := map [string ]any {
1607
+ "provisioners" : []map [string ]any {
1608
+ {
1609
+ "type" : "scep" ,
1610
+ "name" : "scep" ,
1611
+ "challenge" : "*** REDACTED ***" ,
1612
+ "minimumPublicKeyLength" : 2048 ,
1613
+ "encryptionAlgorithmIdentifier" : 2 ,
1614
+ },
1615
+ {
1616
+ "type" : "JWK" ,
1617
+ "name" : "step-cli" ,
1618
+ "key" : map [string ]any {
1619
+ "use" : "sig" ,
1620
+ "kty" : "EC" ,
1621
+ "kid" : "4UELJx8e0aS9m0CH3fZ0EB7D5aUPICb759zALHFejvc" ,
1622
+ "crv" : "P-256" ,
1623
+ "alg" : "ES256" ,
1624
+ "x" : "7ZdAAMZCFU4XwgblI5RfZouBi8lYmF6DlZusNNnsbm8" ,
1625
+ "y" : "sQr2JdzwD2fgyrymBEXWsxDxFNjjqN64qLLSbLdLZ9Y" ,
1626
+ },
1627
+ "encryptedKey" : "eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJlbmMiOiJBMTI4R0NNIiwicDJjIjoxMDAwMDAsInAycyI6IlhOdmYxQjgxSUlLMFA2NUkwcmtGTGcifQ.XaN9zcPQeWt49zchUDm34FECUTHfQTn_.tmNHPQDqR3ebsWfd.9WZr3YVdeOyJh36vvx0VlRtluhvYp4K7jJ1KGDr1qypwZ3ziBVSNbYYQ71du7fTtrnfG1wgGTVR39tWSzBU-zwQ5hdV3rpMAaEbod5zeW6SHd95H3Bvcb43YiiqJFNL5sGZzFb7FqzVmpsZ1efiv6sZaGDHtnCAL6r12UG5EZuqGfM0jGCZitUz2m9TUKXJL5DJ7MOYbFfkCEsUBPDm_TInliSVn2kMJhFa0VOe5wZk5YOuYM3lNYW64HGtbf-llN2Xk-4O9TfeSPizBx9ZqGpeu8pz13efUDT2WL9tWo6-0UE-CrG0bScm8lFTncTkHcu49_a5NaUBkYlBjEiw.thPcx3t1AUcWuEygXIY3Fg" ,
1628
+ },
1629
+ },
1630
+ "nextCursor" : "next" ,
1631
+ }
1632
+
1633
+ expBytes , err := json .Marshal (expected )
1634
+ sassert .NoError (t , err )
1635
+
1636
+ br , err := r .MarshalJSON ()
1637
+ sassert .NoError (t , err )
1638
+ sassert .JSONEq (t , string (expBytes ), string (br ))
1639
+
1640
+ keyCopy := key
1641
+ expList := provisioner.List {
1642
+ & provisioner.SCEP {
1643
+ Name : "scep" ,
1644
+ Type : "scep" ,
1645
+ ChallengePassword : "not-so-secret" ,
1646
+ MinimumPublicKeyLength : 2048 ,
1647
+ EncryptionAlgorithmIdentifier : 2 ,
1648
+ },
1649
+ & provisioner.JWK {
1650
+ EncryptedKey : "eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJlbmMiOiJBMTI4R0NNIiwicDJjIjoxMDAwMDAsInAycyI6IlhOdmYxQjgxSUlLMFA2NUkwcmtGTGcifQ.XaN9zcPQeWt49zchUDm34FECUTHfQTn_.tmNHPQDqR3ebsWfd.9WZr3YVdeOyJh36vvx0VlRtluhvYp4K7jJ1KGDr1qypwZ3ziBVSNbYYQ71du7fTtrnfG1wgGTVR39tWSzBU-zwQ5hdV3rpMAaEbod5zeW6SHd95H3Bvcb43YiiqJFNL5sGZzFb7FqzVmpsZ1efiv6sZaGDHtnCAL6r12UG5EZuqGfM0jGCZitUz2m9TUKXJL5DJ7MOYbFfkCEsUBPDm_TInliSVn2kMJhFa0VOe5wZk5YOuYM3lNYW64HGtbf-llN2Xk-4O9TfeSPizBx9ZqGpeu8pz13efUDT2WL9tWo6-0UE-CrG0bScm8lFTncTkHcu49_a5NaUBkYlBjEiw.thPcx3t1AUcWuEygXIY3Fg" ,
1651
+ Key : & keyCopy ,
1652
+ Name : "step-cli" ,
1653
+ Type : "JWK" ,
1654
+ },
1655
+ }
1656
+
1657
+ // MarshalJSON must not affect the struct properties itself
1658
+ sassert .Equal (t , expList , r .Provisioners )
1659
+ }
0 commit comments