...

Text file src/github.com/tjfoc/gmsm/API使用说明.md

Documentation: github.com/tjfoc/gmsm

     1# 国密GM/T Go API使用说明
     2
     3## Go包安装
     4
     5```bash
     6go get -u github.com/tjfoc/gmsm
     7```
     8## SM2椭圆曲线公钥密码算法 - Public key cryptographic algorithm SM2 based on elliptic curves
     9
    10- 遵循的SM2标准号为: GM/T 0003.1-2012、GM/T 0003.2-2012、GM/T 0003.3-2012、GM/T 0003.4-2012、GM/T 0003.5-2012、GM/T 0009-2012、GM/T 0010-2012
    11- go package: `github.com/tjfoc/gmsm/sm2`
    12
    13### 代码示例
    14
    15```Go
    16    priv, err := sm2.GenerateKey(rand.Reader) // 生成密钥对
    17    if err != nil {
    18    	log.Fatal(err)
    19    }
    20    msg := []byte("Tongji Fintech Research Institute")
    21    pub := &priv.PublicKey
    22    ciphertxt, err := pub.EncryptAsn1(msg,rand.Reader) //sm2加密
    23    if err != nil {
    24    	log.Fatal(err)
    25    }
    26    fmt.Printf("加密结果:%x\n",ciphertxt)
    27    plaintxt,err :=  priv.DecryptAsn1(ciphertxt)  //sm2解密
    28    if err != nil {
    29    	log.Fatal(err)
    30    }
    31    if !bytes.Equal(msg,plaintxt){
    32        log.Fatal("原文不匹配")
    33    }
    34
    35   sign,err := priv.Sign(rand.Reader, msg, nil)  //sm2签名
    36    if err != nil {
    37    	log.Fatal(err)
    38    }
    39    isok := pub.Verify(msg, sign)    //sm2验签
    40    fmt.Printf("Verified: %v\n", isok)
    41```
    42## SM3密码杂凑算法 - SM3 cryptographic hash algorithm
    43- 遵循的SM3标准号为: GM/T 0004-2012
    44- g package:`github.com/tjfoc/gmsm/sm3`
    45- `type SM3 struct` 是原生接口hash.Hash的一个实现
    46
    47### 代码示例
    48
    49```Go
    50    data := "test"
    51    h := sm3.New()
    52    h.Write([]byte(data))
    53    sum := h.Sum(nil)
    54    fmt.Printf("digest value is: %x\n",sum)
    55```
    56
    57## SM4分组密码算法 - SM4 block cipher algorithm
    58
    59- 遵循的SM4标准号为:  GM/T 0002-2012
    60- go package:`github.com/tjfoc/gmsm/sm4`
    61
    62### 代码示例
    63
    64```Go
    65    import  "crypto/cipher"
    66    import  "github.com/tjfoc/gmsm/sm4"
    67    import "fmt"
    68
    69    func main(){
    70    key := []byte("1234567890abcdef")
    71	fmt.Printf("key = %v\n", key)
    72	data := []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10}
    73	fmt.Printf("key = %v\n", key)
    74	fmt.Printf("data = %x\n", data)
    75    iv := []byte("0000000000000000")
    76	err = SetIV(iv)//设置SM4算法实现的IV值,不设置则使用默认值
    77	ecbMsg, err :=sm4.Sm4Ecb(key, data, true)   //sm4Ecb模式pksc7填充加密
    78	if err != nil {
    79		t.Errorf("sm4 enc error:%s", err)
    80		return
    81	}
    82	fmt.Printf("ecbMsg = %x\n", ecbMsg)
    83	ecbDec, err := sm4.Sm4Ecb(key, ecbMsg, false)  //sm4Ecb模式pksc7填充解密
    84	if err != nil {
    85		t.Errorf("sm4 dec error:%s", err)
    86		return
    87	}
    88	fmt.Printf("ecbDec = %x\n", ecbDec)
    89    }
    90```
    91
    92
    93
    94
    95
    96### 具体功能测试代码参考
    97```Go
    98github.com/tjfoc/gmsm/sm2/sm2_test.go  //sm2算法
    99github.com/tjfoc/gmsm/sm3/sm3_test.go  //sm3算法
   100github.com/tjfoc/gmsm/sm4/sm4_test.go  //sm4算法
   101github.com/tjfoc/gmsm/x509/x509_test.go //x509国密证书
   102github.com/tjfoc/gmsm/gmtls/gmcredentials/credentials_test.go  //国密tls
   103github.com/tjfoc/gmsm/gmtls/gmcredentials/websvr/websvr.go     //国密tls与非国密TLS自适应
   104```

View as plain text