...

Source file src/github.com/cloudflare/circl/kem/schemes/schemes.go

Documentation: github.com/cloudflare/circl/kem/schemes

     1  // Package schemes contains a register of KEM schemes.
     2  //
     3  // # Schemes Implemented
     4  //
     5  // Based on standard elliptic curves:
     6  //
     7  //	HPKE_KEM_P256_HKDF_SHA256, HPKE_KEM_P384_HKDF_SHA384, HPKE_KEM_P521_HKDF_SHA512
     8  //
     9  // Based on standard Diffie-Hellman functions:
    10  //
    11  //	HPKE_KEM_X25519_HKDF_SHA256, HPKE_KEM_X448_HKDF_SHA512
    12  //
    13  // Post-quantum kems:
    14  //
    15  //	FrodoKEM-640-SHAKE
    16  //	Kyber512, Kyber768, Kyber1024
    17  package schemes
    18  
    19  import (
    20  	"strings"
    21  
    22  	"github.com/cloudflare/circl/hpke"
    23  	"github.com/cloudflare/circl/kem"
    24  	"github.com/cloudflare/circl/kem/frodo/frodo640shake"
    25  	"github.com/cloudflare/circl/kem/hybrid"
    26  	"github.com/cloudflare/circl/kem/kyber/kyber1024"
    27  	"github.com/cloudflare/circl/kem/kyber/kyber512"
    28  	"github.com/cloudflare/circl/kem/kyber/kyber768"
    29  )
    30  
    31  var allSchemes = [...]kem.Scheme{
    32  	hpke.KEM_P256_HKDF_SHA256.Scheme(),
    33  	hpke.KEM_P384_HKDF_SHA384.Scheme(),
    34  	hpke.KEM_P521_HKDF_SHA512.Scheme(),
    35  	hpke.KEM_X25519_HKDF_SHA256.Scheme(),
    36  	hpke.KEM_X448_HKDF_SHA512.Scheme(),
    37  	frodo640shake.Scheme(),
    38  	kyber512.Scheme(),
    39  	kyber768.Scheme(),
    40  	kyber1024.Scheme(),
    41  	hybrid.Kyber512X25519(),
    42  	hybrid.Kyber768X25519(),
    43  	hybrid.Kyber768X448(),
    44  	hybrid.Kyber1024X448(),
    45  	hybrid.P256Kyber768Draft00(),
    46  }
    47  
    48  var allSchemeNames map[string]kem.Scheme
    49  
    50  func init() {
    51  	allSchemeNames = make(map[string]kem.Scheme)
    52  	for _, scheme := range allSchemes {
    53  		allSchemeNames[strings.ToLower(scheme.Name())] = scheme
    54  	}
    55  }
    56  
    57  // ByName returns the scheme with the given name and nil if it is not
    58  // supported.
    59  //
    60  // Names are case insensitive.
    61  func ByName(name string) kem.Scheme {
    62  	return allSchemeNames[strings.ToLower(name)]
    63  }
    64  
    65  // All returns all KEM schemes supported.
    66  func All() []kem.Scheme { a := allSchemes; return a[:] }
    67  

View as plain text