首页 > 其他分享 >sm2

sm2

时间:2024-12-11 14:59:50浏览次数:2  
标签:err nil x509 sm2 PublicKey panic

package main

import (
    "crypto/ecdsa"
    "crypto/rand"
    "crypto/x509/pkix"
    "fmt"
    "github.com/tjfoc/gmsm/sm2"
    "github.com/tjfoc/gmsm/x509"
    "math/big"
    "time"
)

func ecdsaToSM2PublicKey(ecdsaPublicKey *ecdsa.PublicKey) (*sm2.PublicKey, error) {
    // 获取ECDSA公钥的X和Y坐标
    x := ecdsaPublicKey.X
    y := ecdsaPublicKey.Y

    // 创建SM2公钥对象
    sm2PublicKey := &sm2.PublicKey{
        Curve: sm2.P256Sm2(),
        X:     new(big.Int).Set(x),
        Y:     new(big.Int).Set(y),
    }

    return sm2PublicKey, nil
}

func main() {
    // 生成CA密钥对
    caPrivateKey, err := sm2.GenerateKey(nil)
    if err != nil {
        panic(err)
    }
    caTemplate := x509.Certificate{
        SerialNumber: big.NewInt(1),
        Subject: pkix.Name{
            CommonName: "CA",
        },
        NotBefore:             time.Now(),
        NotAfter:              time.Now().AddDate(10, 0, 0),
        KeyUsage:              x509.KeyUsageCertSign | x509.KeyUsageCRLSign,
        BasicConstraintsValid: true,
        IsCA:                  true,
    }

    caCertBytes, err := x509.CreateCertificate(&caTemplate, &caTemplate, &caPrivateKey.PublicKey, caPrivateKey)
    if err != nil {
        panic(err)
    }
    //caCertBlock, _ := pem.Decode(caCertBytes)
    caCert, _ := x509.ParseCertificate(caCertBytes)

    // 生成用户密钥对和证书请求
    userPrivateKey, err := sm2.GenerateKey(nil)
    if err != nil {
        panic(err)
    }
    userSubject := pkix.Name{
        CommonName: "user.example.com",
    }
    userTemplate := x509.CertificateRequest{
        Subject: userSubject,
    }
    userCsrBytes, err := x509.CreateCertificateRequest(rand.Reader, &userTemplate, userPrivateKey)
    if err != nil {
        panic(err)
    }

    userCsr, err := x509.ParseCertificateRequest(userCsrBytes)
    if err != nil {
        panic(err)
    }

    // 签发用户证书
    userCertTemplate := x509.Certificate{
        SerialNumber: big.NewInt(2),
        Subject:      userSubject,
        NotBefore:    time.Now(),
        NotAfter:     time.Now().AddDate(1, 0, 0),
        KeyUsage:     x509.KeyUsageDigitalSignature | x509.KeyUsageKeyEncipherment,
        ExtKeyUsage:  []x509.ExtKeyUsage{x509.ExtKeyUsageClientAuth},
    }

    //a := sm2.PublicKey{}
    //println("a", a)
    pk, _ := ecdsaToSM2PublicKey(userCsr.PublicKey.(*ecdsa.PublicKey))
    userCertBytes, err := x509.CreateCertificate(&userCertTemplate, caCert, pk, caPrivateKey)
    if err != nil {
        panic(err)
    }

    fmt.Println("用户证书:", userCertBytes)
}

 

标签:err,nil,x509,sm2,PublicKey,panic
From: https://www.cnblogs.com/exmyth/p/18599625

相关文章

  • x509.MarshalSm2PrivateKey
    根据搜索结果,x509.MarshalSm2PrivateKey函数需要两个参数:一个*sm2.PrivateKey和一个[]byte类型的密码。以下是使用x509.MarshalSm2PrivateKey将SM2私钥编码为PEM格式的示例代码:gopackagemainimport( "crypto/rand" "encoding/pem" "fmt" "github.com/tjfoc......
  • SM2604弹窗-layui
    1、添加路径SM2604,/layui-v2.2.5/layui.js 放在PU脚本集合中的第1个  2、layui.use(['layer','form'],function(){varform=layui.form;varlayer=layui.layer;$=layui.jquery;$("#btn_val_CPMC").click(function(){varsql="sel......
  • android开发使用openssl3.3.2加解密国密sm2代码实现
    #include"openssl/rsa.h"#include"openssl/pem.h"#include"openssl/err.h"#include"openssl/evp.h"#include"openssl/ec.h"#include<string>#include<unistd.h>#include"openssl_sm2.hpp&......
  • C#.NET CORE SM2国密PKCS12格式私钥证书解析
    C#.NETCORE SM2国密PKCS12格式私钥证书解析、加载、签名、加密。 PKCS12格式私钥证书,和常见到.sm2文件私钥证书不同。它虽是BASE64编码的字符串,但不能用解析.sm2文件的方法解析。上来还是nuget下载引用 Portable.BouncyCastle库。工具类 GmUtil:usingOrg.BouncyCastle......
  • SM2268XT2量产工具找到了,SM2268XT2量产工具下载,支持B58R闪存颗粒开卡,SM2268XT2开卡工
    前一阵买了一个固态硬盘,主控是SM2268XT2,闪存颗粒是B58R的,由于自己之前量产过SM2263XT主控,所以这次也想玩一下量产。找了半天,才发现这个主控目前还没有公开的SM2268XT2量产工具下载。就在快要放弃的时候,在网上查到量产部落发布了慧荣SM2268XT2主控支持YMTC_WDS闪存的量产工具,......
  • 七彩虹SL300固态硬盘不认盘修复,SM2256K量产工具,支持AD,3A,18,A3,61,25颗粒H27QFG8PDM
    固态硬盘里采用慧荣主控的品牌很多,其中常见的慧荣主控型号有SM2246XT、SM2256K、SM2258XT、SM2259XT、SM2259XT2、SM2259XT3、SM2263XT等等,这些主控的固态硬盘要是坏了,在保质期里的可以返厂维修,如果过保了,我们还是有办法自己修复的,方法就是从量产部落下载量产工具,用量产工具来......
  • SM2244LT量产工具经验分享,SM2244LT量产工具下载,SM2244LT开卡教程
    一、注意事项1、个人观点,仅供参考2、开卡后无法恢复数据二、开卡前的准备1、坏固态硬盘一个(确认主控芯片是慧荣SM2244LT)2、尖头镊子(细铜线、铁丝等能导电的金属都行,塑料的不行)3、一台电脑(可以是笔记本或台式机,台式机最好不要用后置USB)4、转接卡(可以是开卡板、硬盘盒等,建议用ASM1153......
  • 这才是我想要的PCIe 5.0 SSD!慧荣SM2508主控首测:读写满血 还不烫手
    市面上现有的PCIe5.0SSD几乎都采用了群联E26主控,不但读写速度达不到满血标准,最高也就12GB/s,功耗和发热还特别高,经常需要主动风扇散热。英韧IG5666性能好了不少,基本可以跑满,但是发热仍然太高,因为它俩都是台积电12nm。慧荣已经多次展示过他们的方案SM2580,一方面性能满血,一方面发......
  • 金典120GB固态硬盘SM2258XT量产修复成功记录,附SM2258XT B16A开卡软件,VM29F01TEME1(2CA
    偶得一块二手的120G金典SSD,闲来无事搞一下量产,先上外观图片给大家看看:玩量产的一般都知道,找量产工具,肯定是要根据主控型号和闪存颗粒制程,来找相匹配的软件才行。因此我们拆开外壳,下图看到里面主控SM2258XT,颗粒丝印VM29F01TEME1-B16A,这块固态比较方便的地方是,单从丝印上就能看出是B1......
  • 金百达F6Pro带缓存sm2256K开卡成功 附工具 AD, 3A, 18, A3, 61, 25 ,H27UDG8M2M
     开卡工具 SM2256AB_MPO0811A_FWO0803A_SLCFirst.zip      SM2256AB_MPO0811A_FWO0803A_SLCFirst.zip ......