github.com/google/syzkaller@v0.0.0-20240517125934-c0f1611a36d6/sys/linux/init_alg.go (about)

     1  // Copyright 2017 syzkaller project authors. All rights reserved.
     2  // Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
     3  
     4  package linux
     5  
     6  import (
     7  	"math/rand"
     8  
     9  	"github.com/google/syzkaller/prog"
    10  )
    11  
    12  func (arch *arch) generateSockaddrAlg(g *prog.Gen, typ0 prog.Type, dir prog.Dir, old prog.Arg) (
    13  	arg prog.Arg, calls []*prog.Call) {
    14  	typ := typ0.(*prog.StructType)
    15  	family := g.GenerateArg(typ.Fields[0].Type, dir, &calls)
    16  	// There is very little point in generating feat/mask,
    17  	// because that can only fail otherwise correct bind.
    18  	feat := prog.MakeConstArg(typ.Fields[2].Type, dir, 0)
    19  	mask := prog.MakeConstArg(typ.Fields[3].Type, dir, 0)
    20  	if g.NOutOf(1, 1000) {
    21  		feat = g.GenerateArg(typ.Fields[2].Type, dir, &calls).(*prog.ConstArg)
    22  		mask = g.GenerateArg(typ.Fields[3].Type, dir, &calls).(*prog.ConstArg)
    23  	}
    24  	algType, algName := generateAlgName(g.Rand())
    25  	// Extend/truncate type/name to their fixed sizes.
    26  	algTypeData := fixedSizeData(algType, typ.Fields[1].Type.Size())
    27  	algNameData := fixedSizeData(algName, typ.Fields[4].Type.Size())
    28  	arg = prog.MakeGroupArg(typ, dir, []prog.Arg{
    29  		family,
    30  		prog.MakeDataArg(typ.Fields[1].Type, dir, algTypeData),
    31  		feat,
    32  		mask,
    33  		prog.MakeDataArg(typ.Fields[4].Type, dir, algNameData),
    34  	})
    35  	return
    36  }
    37  
    38  func (arch *arch) generateAlgName(g *prog.Gen, typ prog.Type, dir prog.Dir, old prog.Arg) (
    39  	arg prog.Arg, calls []*prog.Call) {
    40  	return generateAlgNameStruct(g, typ, dir, allTypes[g.Rand().Intn(len(allTypes))].typ)
    41  }
    42  
    43  func (arch *arch) generateAlgAeadName(g *prog.Gen, typ prog.Type, dir prog.Dir, old prog.Arg) (
    44  	arg prog.Arg, calls []*prog.Call) {
    45  	return generateAlgNameStruct(g, typ, dir, ALG_AEAD)
    46  }
    47  
    48  func (arch *arch) generateAlgHashName(g *prog.Gen, typ prog.Type, dir prog.Dir, old prog.Arg) (
    49  	arg prog.Arg, calls []*prog.Call) {
    50  	return generateAlgNameStruct(g, typ, dir, ALG_HASH)
    51  }
    52  
    53  func (arch *arch) generateAlgSkcipherhName(g *prog.Gen, typ prog.Type, dir prog.Dir, old prog.Arg) (
    54  	arg prog.Arg, calls []*prog.Call) {
    55  	return generateAlgNameStruct(g, typ, dir, ALG_SKCIPHER)
    56  }
    57  
    58  func generateAlgNameStruct(g *prog.Gen, typ0 prog.Type, dir prog.Dir, algTyp int) (
    59  	arg prog.Arg, calls []*prog.Call) {
    60  	typ := typ0.(*prog.StructType)
    61  	algName := generateAlg(g.Rand(), algTyp)
    62  	algNameData := fixedSizeData(algName, typ.Fields[0].Size())
    63  	arg = prog.MakeGroupArg(typ, dir, []prog.Arg{
    64  		prog.MakeDataArg(typ.Fields[0].Type, dir, algNameData),
    65  	})
    66  	return
    67  }
    68  
    69  func generateAlgName(rnd *rand.Rand) (string, string) {
    70  	typ := allTypes[rnd.Intn(len(allTypes))]
    71  	name := generateAlg(rnd, typ.typ)
    72  	return typ.name, name
    73  }
    74  
    75  func generateAlg(rnd *rand.Rand, typ int) string {
    76  	algs := allAlgs[typ]
    77  	alg := algs[rnd.Intn(len(algs))]
    78  	return generateAlgImpl(rnd, alg)
    79  }
    80  
    81  func generateAlgImpl(rnd *rand.Rand, alg algDesc) string {
    82  	args := ""
    83  	if len(alg.args) != 0 {
    84  		args += "("
    85  		for i, a := range alg.args {
    86  			if i != 0 {
    87  				args += ","
    88  			}
    89  			args += generateAlg(rnd, a)
    90  		}
    91  		args += ")"
    92  	}
    93  	return alg.name + args
    94  }
    95  
    96  func fixedSizeData(str string, sz uint64) []byte {
    97  	return append([]byte(str), make([]byte, sz)...)[:sz]
    98  }
    99  
   100  type algType struct {
   101  	name string
   102  	typ  int
   103  }
   104  
   105  type algDesc struct {
   106  	name string
   107  	args []int
   108  }
   109  
   110  const (
   111  	ALG_CIPHER = iota
   112  	ALG_SKCIPHER
   113  	ALG_AEAD
   114  	ALG_HASH
   115  	ALG_RNG
   116  )
   117  
   118  var allTypes = []algType{
   119  	{"aead", ALG_AEAD},
   120  	{"skcipher", ALG_SKCIPHER},
   121  	{"hash", ALG_HASH},
   122  	{"rng", ALG_RNG},
   123  }
   124  
   125  // Algorithms can be extracted with something along the following lines:
   126  //
   127  //	cat /proc/crypto | grep -B 8 ": skcipher" | grep -B 7 "internal     : no" | egrep "name |driver " | \
   128  //		cut -b 16- | sort | uniq | awk '{printf("{\"%s\", nil},\n", $1)}'
   129  //
   130  // Note: the kernel needs to include all crypto configs and CPU needs to support AVX/NEON/etc.
   131  var allAlgs = map[int][]algDesc{
   132  	ALG_AEAD: {
   133  		// templates:
   134  		{"authenc", []int{ALG_HASH, ALG_SKCIPHER}},
   135  		{"authencesn", []int{ALG_HASH, ALG_SKCIPHER}},
   136  		{"ccm", []int{ALG_CIPHER}},
   137  		{"ccm_base", []int{ALG_SKCIPHER, ALG_HASH}},
   138  		{"echainiv", []int{ALG_AEAD}},
   139  		{"essiv", []int{ALG_AEAD, ALG_HASH}},
   140  		{"gcm", []int{ALG_CIPHER}},
   141  		{"gcm_base", []int{ALG_SKCIPHER, ALG_HASH}},
   142  		{"pcrypt", []int{ALG_AEAD}},
   143  		{"rfc4106", []int{ALG_AEAD}},
   144  		{"rfc4309", []int{ALG_AEAD}},
   145  		{"rfc4543", []int{ALG_AEAD}},
   146  		{"rfc7539", []int{ALG_SKCIPHER, ALG_HASH}},
   147  		{"rfc7539esp", []int{ALG_SKCIPHER, ALG_HASH}},
   148  		{"seqiv", []int{ALG_AEAD}},
   149  
   150  		// algorithms:
   151  		{"aegis128", nil},
   152  		{"aegis128-aesni", nil},
   153  		{"aegis128-generic", nil},
   154  		{"aegis128l", nil},
   155  		{"aegis128l-aesni", nil},
   156  		{"aegis128l-generic", nil},
   157  		{"aegis256", nil},
   158  		{"aegis256-aesni", nil},
   159  		{"aegis256-generic", nil},
   160  		{"ccm-aes-ce", nil},
   161  		{"gcm(aes)", nil},
   162  		{"gcm-aes-ce", nil},
   163  		{"gcm_base(ctr(aes-aesni),ghash-generic)", nil},
   164  		{"generic-gcm-aesni", nil},
   165  		{"morus1280", nil},
   166  		{"morus1280-avx2", nil},
   167  		{"morus1280-generic", nil},
   168  		{"morus1280-sse2", nil},
   169  		{"morus640", nil},
   170  		{"morus640-generic", nil},
   171  		{"morus640-sse2", nil},
   172  		{"rfc4106(gcm(aes))", nil},
   173  		{"rfc4106-gcm-aesni", nil},
   174  	},
   175  	ALG_SKCIPHER: {
   176  		// templates:
   177  		{"adiantum", []int{ALG_SKCIPHER, ALG_CIPHER, ALG_HASH}},
   178  		{"adiantum", []int{ALG_SKCIPHER, ALG_CIPHER}},
   179  		{"cbc", []int{ALG_CIPHER}},
   180  		{"cfb", []int{ALG_CIPHER}},
   181  		{"cryptd", []int{ALG_SKCIPHER}},
   182  		{"ctr", []int{ALG_CIPHER}},
   183  		{"cts", []int{ALG_SKCIPHER}},
   184  		{"ecb", []int{ALG_CIPHER}},
   185  		{"essiv", []int{ALG_SKCIPHER, ALG_HASH}},
   186  		{"fpu", []int{ALG_SKCIPHER}},
   187  		{"kw", []int{ALG_CIPHER}},
   188  		{"lrw", []int{ALG_SKCIPHER}},
   189  		{"lrw", []int{ALG_CIPHER}},
   190  		{"ofb", []int{ALG_CIPHER}},
   191  		{"pcbc", []int{ALG_CIPHER}},
   192  		{"rfc3686", []int{ALG_SKCIPHER}},
   193  		{"xts", []int{ALG_SKCIPHER}},
   194  		{"xts", []int{ALG_CIPHER}},
   195  
   196  		// algorithms:
   197  		{"cbc(aes)", nil},
   198  		{"cbc(aes-aesni)", nil},
   199  		{"cbc-aes-aesni", nil},
   200  		{"cbc(aes-arm)", nil},
   201  		{"cbc(aes-ce)", nil},
   202  		{"cbc-aes-ce", nil},
   203  		{"cbc-aes-neonbs", nil},
   204  		{"cbc(blowfish)", nil},
   205  		{"cbc-blowfish-asm", nil},
   206  		{"cbc(camellia)", nil},
   207  		{"cbc-camellia-aesni", nil},
   208  		{"cbc-camellia-aesni-avx2", nil},
   209  		{"cbc-camellia-asm", nil},
   210  		{"cbc(cast5)", nil},
   211  		{"cbc-cast5-avx", nil},
   212  		{"cbc(cast6)", nil},
   213  		{"cbc-cast6-avx", nil},
   214  		{"cbc(des3_ede)", nil},
   215  		{"cbc-des3_ede-asm", nil},
   216  		{"cbc(serpent)", nil},
   217  		{"cbc-serpent-avx", nil},
   218  		{"cbc-serpent-avx2", nil},
   219  		{"cbc-serpent-sse2", nil},
   220  		{"cbc(twofish)", nil},
   221  		{"cbc-twofish-3way", nil},
   222  		{"cbc-twofish-avx", nil},
   223  		{"chacha20", nil},
   224  		{"chacha20-arm", nil},
   225  		{"chacha20-generic", nil},
   226  		{"chacha20-neon", nil},
   227  		{"chacha20-simd", nil},
   228  		{"ctr(aes)", nil},
   229  		{"ctr(aes-aesni)", nil},
   230  		{"ctr(blowfish)", nil},
   231  		{"ctr(camellia)", nil},
   232  		{"ctr(cast5)", nil},
   233  		{"ctr(cast6)", nil},
   234  		{"ctr(des3_ede)", nil},
   235  		{"ctr(serpent)", nil},
   236  		{"ctr(twofish)", nil},
   237  		{"ctr-aes-aesni", nil},
   238  		{"ctr-aes-ce", nil},
   239  		{"ctr-aes-neon", nil},
   240  		{"ctr-aes-neonbs", nil},
   241  		{"ctr-aes-neonbs-sync", nil},
   242  		{"ctr-blowfish-asm", nil},
   243  		{"ctr-camellia-aesni", nil},
   244  		{"ctr-camellia-aesni-avx2", nil},
   245  		{"ctr-camellia-asm", nil},
   246  		{"ctr-cast5-avx", nil},
   247  		{"ctr-cast6-avx", nil},
   248  		{"ctr-des3_ede-asm", nil},
   249  		{"ctr-serpent-avx", nil},
   250  		{"ctr-serpent-avx2", nil},
   251  		{"ctr-serpent-sse2", nil},
   252  		{"ctr-twofish-3way", nil},
   253  		{"ctr-twofish-avx", nil},
   254  		{"cts(cbc(aes))", nil},
   255  		{"cts-cbc-aes-aesni", nil},
   256  		{"cts-cbc-aes-ce", nil},
   257  		{"cts-cbc-aes-neon", nil},
   258  		{"ecb(aes)", nil},
   259  		{"ecb-aes-aesni", nil},
   260  		{"ecb-aes-ce", nil},
   261  		{"ecb-aes-neonbs", nil},
   262  		{"ecb(arc4)", nil},
   263  		{"ecb(arc4)-generic", nil},
   264  		{"ecb(blowfish)", nil},
   265  		{"ecb(camellia)", nil},
   266  		{"ecb(cast5)", nil},
   267  		{"ecb(cast6)", nil},
   268  		{"ecb(cipher_null)", nil},
   269  		{"ecb(des3_ede)", nil},
   270  		{"ecb(serpent)", nil},
   271  		{"ecb(twofish)", nil},
   272  		{"ecb-aes-neon", nil},
   273  		{"ecb-blowfish-asm", nil},
   274  		{"ecb-camellia-aesni", nil},
   275  		{"ecb-camellia-aesni-avx2", nil},
   276  		{"ecb-camellia-asm", nil},
   277  		{"ecb-cast5-avx", nil},
   278  		{"ecb-cast6-avx", nil},
   279  		{"ecb-cipher_null", nil},
   280  		{"ecb-des3_ede-asm", nil},
   281  		{"ecb-serpent-avx", nil},
   282  		{"ecb-serpent-avx2", nil},
   283  		{"ecb-serpent-sse2", nil},
   284  		{"ecb-twofish-3way", nil},
   285  		{"ecb-twofish-avx", nil},
   286  		{"fpu(pcbc(aes))", nil},
   287  		{"fpu(pcbc(aes-aesni))", nil},
   288  		{"lrw(camellia)", nil},
   289  		{"lrw(cast6)", nil},
   290  		{"lrw(serpent)", nil},
   291  		{"lrw(twofish)", nil},
   292  		{"lrw-camellia-aesni", nil},
   293  		{"lrw-camellia-aesni-avx2", nil},
   294  		{"lrw-camellia-asm", nil},
   295  		{"lrw-cast6-avx", nil},
   296  		{"lrw-serpent-avx", nil},
   297  		{"lrw-serpent-avx2", nil},
   298  		{"lrw-serpent-sse2", nil},
   299  		{"lrw-twofish-3way", nil},
   300  		{"lrw-twofish-avx", nil},
   301  		{"pcbc(aes)", nil},
   302  		{"pcbc(aes-aesni)", nil},
   303  		{"pcbc-aes-aesni", nil},
   304  		{"salsa20", nil},
   305  		{"salsa20-asm", nil},
   306  		{"salsa20-generic", nil},
   307  		{"essiv(cbc(aes),sha256)", nil},
   308  		{"essiv-cbc-aes-sha256-ce", nil},
   309  		{"essiv-cbc-aes-sha256-neon", nil},
   310  		{"pcbc(fcrypt)", nil},
   311  		{"pcbc(fcrypt-generic)", nil},
   312  		{"xchacha12", nil},
   313  		{"xchacha12-arm", nil},
   314  		{"xchacha12-generic", nil},
   315  		{"xchacha12-neon", nil},
   316  		{"xchacha12-simd", nil},
   317  		{"xchacha20", nil},
   318  		{"xchacha20-arm", nil},
   319  		{"xchacha20-generic", nil},
   320  		{"xchacha20-neon", nil},
   321  		{"xchacha20-simd", nil},
   322  		{"xts(aes)", nil},
   323  		{"xts(camellia)", nil},
   324  		{"xts(cast6)", nil},
   325  		{"xts(serpent)", nil},
   326  		{"xts(twofish)", nil},
   327  		{"xts-aes-aesni", nil},
   328  		{"xts-aes-ce", nil},
   329  		{"xts-aes-neonbs", nil},
   330  		{"xts-aes-neon", nil},
   331  		{"xts-camellia-aesni", nil},
   332  		{"xts-camellia-aesni-avx2", nil},
   333  		{"xts-camellia-asm", nil},
   334  		{"xts-cast6-avx", nil},
   335  		{"xts-serpent-avx", nil},
   336  		{"xts-serpent-avx2", nil},
   337  		{"xts-serpent-sse2", nil},
   338  		{"xts-twofish-3way", nil},
   339  		{"xts-twofish-avx", nil},
   340  	},
   341  	ALG_CIPHER: {
   342  		{"aes", nil},
   343  		{"aes-aesni", nil},
   344  		{"aes-arm", nil},
   345  		{"aes-arm64", nil},
   346  		{"aes-asm", nil},
   347  		{"aes-ce", nil},
   348  		{"aes-fixed-time", nil},
   349  		{"aes-generic", nil},
   350  		{"anubis", nil},
   351  		{"anubis-generic", nil},
   352  		{"arc4", nil},
   353  		{"arc4-generic", nil},
   354  		{"blowfish", nil},
   355  		{"blowfish-asm", nil},
   356  		{"blowfish-generic", nil},
   357  		{"camellia", nil},
   358  		{"camellia-asm", nil},
   359  		{"camellia-generic", nil},
   360  		{"cast5", nil},
   361  		{"cast5-generic", nil},
   362  		{"cast6", nil},
   363  		{"cast6-generic", nil},
   364  		{"cipher_null", nil},
   365  		{"cipher_null-generic", nil},
   366  		{"compress_null-generic", nil},
   367  		{"des", nil},
   368  		{"des3_ede", nil},
   369  		{"des3_ede-asm", nil},
   370  		{"des3_ede-generic", nil},
   371  		{"des-generic", nil},
   372  		{"fcrypt", nil},
   373  		{"fcrypt-generic", nil},
   374  		{"khazad", nil},
   375  		{"khazad-generic", nil},
   376  		{"seed", nil},
   377  		{"seed-generic", nil},
   378  		{"serpent", nil},
   379  		{"serpent-generic", nil},
   380  		{"sm4", nil},
   381  		{"sm4-ce", nil},
   382  		{"sm4-generic", nil},
   383  		{"tea", nil},
   384  		{"tea-generic", nil},
   385  		{"tnepres", nil},
   386  		{"tnepres-generic", nil},
   387  		{"twofish", nil},
   388  		{"twofish-asm", nil},
   389  		{"twofish-generic", nil},
   390  		{"xeta", nil},
   391  		{"xeta-generic", nil},
   392  		{"xtea", nil},
   393  		{"xtea-generic", nil},
   394  	},
   395  	ALG_HASH: {
   396  		// templates:
   397  		{"cbcmac", []int{ALG_CIPHER}},
   398  		{"cmac", []int{ALG_CIPHER}},
   399  		{"cryptd", []int{ALG_HASH}},
   400  		{"hmac", []int{ALG_HASH}},
   401  		{"mcryptd", []int{ALG_HASH}},
   402  		{"vmac", []int{ALG_CIPHER}},
   403  		{"vmac64", []int{ALG_CIPHER}},
   404  		{"xcbc", []int{ALG_CIPHER}},
   405  
   406  		// algorithms:
   407  		{"blake2b-160", nil},
   408  		{"blake2b-160-generic", nil},
   409  		{"blake2b-256", nil},
   410  		{"blake2b-256-generic", nil},
   411  		{"blake2b-384", nil},
   412  		{"blake2b-384-generic", nil},
   413  		{"blake2b-512", nil},
   414  		{"blake2b-512-generic", nil},
   415  		{"blake2s-128", nil},
   416  		{"blake2s-128-arm", nil},
   417  		{"blake2s-128-generic", nil},
   418  		{"blake2s-128-x86", nil},
   419  		{"blake2s-160", nil},
   420  		{"blake2s-160-arm", nil},
   421  		{"blake2s-160-generic", nil},
   422  		{"blake2s-160-x86", nil},
   423  		{"blake2s-224", nil},
   424  		{"blake2s-224-arm", nil},
   425  		{"blake2s-224-generic", nil},
   426  		{"blake2s-224-x86", nil},
   427  		{"blake2s-256", nil},
   428  		{"blake2s-256-arm", nil},
   429  		{"blake2s-256-generic", nil},
   430  		{"blake2s-256-x86", nil},
   431  		{"cbcmac(aes)", nil},
   432  		{"cbcmac-aes-ce", nil},
   433  		{"cbcmac-aes-neon", nil},
   434  		{"cmac(aes)", nil},
   435  		{"cmac-aes-ce", nil},
   436  		{"cmac-aes-neon", nil},
   437  		{"crc32", nil},
   438  		{"crc32c", nil},
   439  		{"crc32c-generic", nil},
   440  		{"crc32c-intel", nil},
   441  		{"crc32-generic", nil},
   442  		{"crc32-pclmul", nil},
   443  		{"crct10dif", nil},
   444  		{"crct10dif-arm64-ce", nil},
   445  		{"crct10dif-arm64-neon", nil},
   446  		{"crct10dif-generic", nil},
   447  		{"crct10dif-pclmul", nil},
   448  		{"digest_null", nil},
   449  		{"digest_null-generic", nil},
   450  		{"ghash", nil},
   451  		{"ghash-ce", nil},
   452  		{"ghash-ce-sync", nil},
   453  		{"ghash-clmulni", nil},
   454  		{"ghash-generic", nil},
   455  		{"hmac(sha1)", nil},
   456  		{"hmac(sha1-avx2)", nil},
   457  		{"hmac(sha1-ce)", nil},
   458  		{"hmac(sha1-neon)", nil},
   459  		{"hmac(sha256)", nil},
   460  		{"hmac(sha256-avx2)", nil},
   461  		{"hmac(sha256-ce)", nil},
   462  		{"hmac(sha256-neon)", nil},
   463  		{"md4", nil},
   464  		{"md4-generic", nil},
   465  		{"md5", nil},
   466  		{"md5-generic", nil},
   467  		{"michael_mic", nil},
   468  		{"michael_mic-generic", nil},
   469  		{"nhpoly1305", nil},
   470  		{"nhpoly1305-avx2", nil},
   471  		{"nhpoly1305-generic", nil},
   472  		{"nhpoly1305-neon", nil},
   473  		{"nhpoly1305-sse2", nil},
   474  		{"poly1305", nil},
   475  		{"poly1305-arm", nil},
   476  		{"poly1305-generic", nil},
   477  		{"poly1305-neon", nil},
   478  		{"poly1305-simd", nil},
   479  		{"rmd128", nil},
   480  		{"rmd128-generic", nil},
   481  		{"rmd160", nil},
   482  		{"rmd160-generic", nil},
   483  		{"rmd256", nil},
   484  		{"rmd256-generic", nil},
   485  		{"rmd320", nil},
   486  		{"rmd320-generic", nil},
   487  		{"sha1", nil},
   488  		{"sha1-asm", nil},
   489  		{"sha1-avx", nil},
   490  		{"sha1-avx2", nil},
   491  		{"sha1-ce", nil},
   492  		{"sha1-generic", nil},
   493  		{"sha1_mb", nil},
   494  		{"sha1-neon", nil},
   495  		{"sha1-ni", nil},
   496  		{"sha1-ssse3", nil},
   497  		{"sha224", nil},
   498  		{"sha224-arm64", nil},
   499  		{"sha224-arm64-neon", nil},
   500  		{"sha224-asm", nil},
   501  		{"sha224-avx", nil},
   502  		{"sha224-avx2", nil},
   503  		{"sha224-ce", nil},
   504  		{"sha224-generic", nil},
   505  		{"sha224-neon", nil},
   506  		{"sha224-ni", nil},
   507  		{"sha224-ssse3", nil},
   508  		{"sha256", nil},
   509  		{"sha256-arm64", nil},
   510  		{"sha256-arm64-neon", nil},
   511  		{"sha256-asm", nil},
   512  		{"sha256-avx", nil},
   513  		{"sha256-avx2", nil},
   514  		{"sha256-ce", nil},
   515  		{"sha256-generic", nil},
   516  		{"sha256-mb", nil},
   517  		{"sha256-neon", nil},
   518  		{"sha256-ni", nil},
   519  		{"sha256-ssse3", nil},
   520  		{"sha3-224", nil},
   521  		{"sha3-224-ce", nil},
   522  		{"sha3-224-generic", nil},
   523  		{"sha3-256", nil},
   524  		{"sha3-256-ce", nil},
   525  		{"sha3-256-generic", nil},
   526  		{"sha3-384", nil},
   527  		{"sha3-384-ce", nil},
   528  		{"sha3-384-generic", nil},
   529  		{"sha3-512", nil},
   530  		{"sha3-512-ce", nil},
   531  		{"sha3-512-generic", nil},
   532  		{"sha384", nil},
   533  		{"sha384-arm", nil},
   534  		{"sha384-arm64", nil},
   535  		{"sha384-avx", nil},
   536  		{"sha384-avx2", nil},
   537  		{"sha384-ce", nil},
   538  		{"sha384-generic", nil},
   539  		{"sha384-neon", nil},
   540  		{"sha384-ssse3", nil},
   541  		{"sha512", nil},
   542  		{"sha512-arm", nil},
   543  		{"sha512-arm64", nil},
   544  		{"sha512-avx", nil},
   545  		{"sha512-avx2", nil},
   546  		{"sha512-ce", nil},
   547  		{"sha512-generic", nil},
   548  		{"sha512_mb", nil},
   549  		{"sha512-neon", nil},
   550  		{"sha512-ssse3", nil},
   551  		{"sm3", nil},
   552  		{"sm3-ce", nil},
   553  		{"sm3-generic", nil},
   554  		{"streebog256", nil},
   555  		{"streebog256-generic", nil},
   556  		{"streebog512", nil},
   557  		{"streebog512-generic", nil},
   558  		{"tgr128", nil},
   559  		{"tgr128-generic", nil},
   560  		{"tgr160", nil},
   561  		{"tgr160-generic", nil},
   562  		{"tgr192", nil},
   563  		{"tgr192-generic", nil},
   564  		{"wp256", nil},
   565  		{"wp256-generic", nil},
   566  		{"wp384", nil},
   567  		{"wp384-generic", nil},
   568  		{"wp512", nil},
   569  		{"wp512-generic", nil},
   570  		{"xcbc(aes)", nil},
   571  		{"xcbc-aes-ce", nil},
   572  		{"xcbc-aes-neon", nil},
   573  		{"xxhash64", nil},
   574  		{"xxhash64-generic", nil},
   575  	},
   576  	ALG_RNG: {
   577  		{"ansi_cprng", nil},
   578  		{"drbg_nopr_ctr_aes128", nil},
   579  		{"drbg_nopr_ctr_aes192", nil},
   580  		{"drbg_nopr_ctr_aes256", nil},
   581  		{"drbg_nopr_hmac_sha1", nil},
   582  		{"drbg_nopr_hmac_sha256", nil},
   583  		{"drbg_nopr_hmac_sha384", nil},
   584  		{"drbg_nopr_hmac_sha512", nil},
   585  		{"drbg_nopr_sha1", nil},
   586  		{"drbg_nopr_sha256", nil},
   587  		{"drbg_nopr_sha384", nil},
   588  		{"drbg_nopr_sha512", nil},
   589  		{"drbg_pr_ctr_aes128", nil},
   590  		{"drbg_pr_ctr_aes192", nil},
   591  		{"drbg_pr_ctr_aes256", nil},
   592  		{"drbg_pr_hmac_sha1", nil},
   593  		{"drbg_pr_hmac_sha256", nil},
   594  		{"drbg_pr_hmac_sha384", nil},
   595  		{"drbg_pr_hmac_sha512", nil},
   596  		{"drbg_pr_sha1", nil},
   597  		{"drbg_pr_sha256", nil},
   598  		{"drbg_pr_sha384", nil},
   599  		{"drbg_pr_sha512", nil},
   600  		{"jitterentropy_rng", nil},
   601  		{"stdrng", nil},
   602  	},
   603  }