57 lines
1.1 KiB
Go
57 lines
1.1 KiB
Go
/*
|
|
Copyright IBM Corp. All Rights Reserved.
|
|
|
|
SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
package util
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"crypto/rsa"
|
|
"crypto/x509"
|
|
"crypto/x509/pkix"
|
|
"encoding/pem"
|
|
"math/big"
|
|
)
|
|
|
|
// GenerateMockPublicPrivateKeyPairPEM returns public/private key pair encoded
|
|
// as PEM strings.
|
|
func GenerateMockPublicPrivateKeyPairPEM(isCA bool) (string, string, error) {
|
|
privateKey, err := rsa.GenerateKey(rand.Reader, 1024)
|
|
if err != nil {
|
|
return "", "", err
|
|
}
|
|
privateKeyPEM := string(pem.EncodeToMemory(
|
|
&pem.Block{
|
|
Type: "RSA PRIVATE KEY",
|
|
Bytes: x509.MarshalPKCS1PrivateKey(privateKey),
|
|
},
|
|
))
|
|
|
|
template := x509.Certificate{
|
|
SerialNumber: big.NewInt(100),
|
|
Subject: pkix.Name{
|
|
Organization: []string{"Hyperledger Fabric"},
|
|
},
|
|
}
|
|
if isCA {
|
|
template.IsCA = true
|
|
template.KeyUsage |= x509.KeyUsageCertSign
|
|
}
|
|
|
|
publicKeyCert, err := x509.CreateCertificate(rand.Reader, &template, &template, privateKey.Public(), privateKey)
|
|
if err != nil {
|
|
return "", "", err
|
|
}
|
|
|
|
publicKeyCertPEM := string(pem.EncodeToMemory(
|
|
&pem.Block{
|
|
Type: "CERTIFICATE",
|
|
Bytes: publicKeyCert,
|
|
},
|
|
))
|
|
|
|
return publicKeyCertPEM, privateKeyPEM, nil
|
|
}
|