diff options
Diffstat (limited to 'libgo/go/internal/cpu/cpu_s390x.go')
-rw-r--r-- | libgo/go/internal/cpu/cpu_s390x.go | 54 |
1 files changed, 44 insertions, 10 deletions
diff --git a/libgo/go/internal/cpu/cpu_s390x.go b/libgo/go/internal/cpu/cpu_s390x.go index 22d9aef178a..a7c5572010b 100644 --- a/libgo/go/internal/cpu/cpu_s390x.go +++ b/libgo/go/internal/cpu/cpu_s390x.go @@ -20,14 +20,34 @@ const ( aes256 function = 20 // AES-256 // K{I,L}MD function codes - sha1 function = 1 // SHA-1 - sha256 function = 2 // SHA-256 - sha512 function = 3 // SHA-512 + sha1 function = 1 // SHA-1 + sha256 function = 2 // SHA-256 + sha512 function = 3 // SHA-512 + sha3_224 function = 32 // SHA3-224 + sha3_256 function = 33 // SHA3-256 + sha3_384 function = 34 // SHA3-384 + sha3_512 function = 35 // SHA3-512 + shake128 function = 36 // SHAKE-128 + shake256 function = 37 // SHAKE-256 // KLMD function codes ghash function = 65 // GHASH ) +const ( + // KDSA function codes + ecdsaVerifyP256 function = 1 // NIST P256 + ecdsaVerifyP384 function = 2 // NIST P384 + ecdsaVerifyP521 function = 3 // NIST P521 + ecdsaSignP256 function = 9 // NIST P256 + ecdsaSignP384 function = 10 // NIST P384 + ecdsaSignP521 function = 11 // NIST P521 + eddsaVerifyEd25519 function = 32 // Curve25519 + eddsaVerifyEd448 function = 36 // Curve448 + eddsaSignEd25519 function = 40 // Curve25519 + eddsaSignEd448 function = 44 // Curve448 +) + // queryResult contains the result of a Query function // call. Bits are numbered in big endian order so the // leftmost bit (the MSB) is at index 0. @@ -68,9 +88,10 @@ const ( msa4 facility = 77 // message-security-assist extension 4 msa5 facility = 57 // message-security-assist extension 5 msa8 facility = 146 // message-security-assist extension 8 + msa9 facility = 155 // message-security-assist extension 9 // vector facilities - ve1 facility = 135 // vector-enhancements 1 + vxe facility = 135 // vector-enhancements 1 // Note: vx and highgprs are excluded because they require // kernel support and so must be fetched from HWCAP. @@ -105,18 +126,20 @@ func kmctrQuery() queryResult func kmaQuery() queryResult func kimdQuery() queryResult func klmdQuery() queryResult +func kdsaQuery() queryResult func doinit() { options = []option{ - {Name: "zarch", Feature: &S390X.HasZArch}, + {Name: "zarch", Feature: &S390X.HasZARCH}, {Name: "stfle", Feature: &S390X.HasSTFLE}, - {Name: "ldisp", Feature: &S390X.HasLDisp}, + {Name: "ldisp", Feature: &S390X.HasLDISP}, {Name: "msa", Feature: &S390X.HasMSA}, - {Name: "eimm", Feature: &S390X.HasEImm}, + {Name: "eimm", Feature: &S390X.HasEIMM}, {Name: "dfp", Feature: &S390X.HasDFP}, - {Name: "etf3eh", Feature: &S390X.HasETF3Enhanced}, + {Name: "etf3eh", Feature: &S390X.HasETF3EH}, {Name: "vx", Feature: &S390X.HasVX}, - {Name: "ve1", Feature: &S390X.HasVE1}, + {Name: "vxe", Feature: &S390X.HasVXE}, + {Name: "kdsa", Feature: &S390X.HasKDSA}, } aes := []function{aes128, aes192, aes256} @@ -143,8 +166,19 @@ func doinit() { S390X.HasSHA256 = kimd.Has(sha256) && klmd.Has(sha256) S390X.HasSHA512 = kimd.Has(sha512) && klmd.Has(sha512) S390X.HasGHASH = kimd.Has(ghash) // KLMD-GHASH does not exist + sha3 := []function{ + sha3_224, sha3_256, sha3_384, sha3_512, + shake128, shake256, + } + S390X.HasSHA3 = kimd.Has(sha3...) && klmd.Has(sha3...) + S390X.HasKDSA = facilities.Has(msa9) // elliptic curves + if S390X.HasKDSA { + kdsa := kdsaQuery() + S390X.HasECDSA = kdsa.Has(ecdsaVerifyP256, ecdsaSignP256, ecdsaVerifyP384, ecdsaSignP384, ecdsaVerifyP521, ecdsaSignP521) + S390X.HasEDDSA = kdsa.Has(eddsaVerifyEd25519, eddsaSignEd25519, eddsaVerifyEd448, eddsaSignEd448) + } } if S390X.HasVX { - S390X.HasVE1 = facilities.Has(ve1) + S390X.HasVXE = facilities.Has(vxe) } } |