github.com/hxx258456/ccgo@v0.0.5-0.20230213014102-48b35f46f66f/sm3/sm3block_arm64.go (about)

     1  //go:build arm64
     2  // +build arm64
     3  
     4  package sm3
     5  
     6  /*
     7  sm3/sm3block_arm64.go 平台CPU是arm64架构时SM3的块处理。
     8  具体实现 : sm3/sm3block_arm64.s
     9  */
    10  
    11  import (
    12  	"fmt"
    13  	"runtime"
    14  
    15  	"golang.org/x/sys/cpu"
    16  )
    17  
    18  var useSM3NI = cpu.ARM64.HasSM3
    19  
    20  func init() {
    21  	cpuType = runtime.GOARCH
    22  	if false {
    23  		fmt.Printf("该平台CPU架构为arm64, 对SM3指令集的支持: %v\n", useSM3NI)
    24  	}
    25  }
    26  
    27  var t = []uint32{
    28  	0x79cc4519,
    29  	0x9d8a7a87,
    30  }
    31  
    32  //go:noescape
    33  func blockARM64(dig *digest, p []byte)
    34  
    35  //go:noescape
    36  func blockSM3NI(h []uint32, p []byte, t []uint32)
    37  
    38  func block(dig *digest, p []byte) {
    39  	if !useSM3NI {
    40  		blockARM64(dig, p)
    41  	} else {
    42  		h := dig.h[:]
    43  		blockSM3NI(h, p, t)
    44  	}
    45  }