Documentation
¶
Overview ¶
Package bcrypt implements interop with bcrypt.dll, a component of Windows CNG. See https://learn.microsoft.com/en-us/windows/win32/api/bcrypt/
Note: this package is not related to the bcrypt password hashing algorithm.
Index ¶
- Constants
- func CloseAlgorithmProvider(hAlgorithm ALG_HANDLE, dwFlags uint32) (ntstatus error)
- func CreateHash(hAlgorithm ALG_HANDLE, phHash *HASH_HANDLE, pbHashObject []byte, ...) (ntstatus error)
- func Decapsulate(hKey KEY_HANDLE, pbCiphertext []byte, pbSecret []byte, pcbResult *uint32, ...) (ntstatus error)
- func Decrypt(hKey KEY_HANDLE, ciphertext []byte, pPaddingInfo unsafe.Pointer, pbIV []byte, ...) (ntstatus error)
- func DeriveKey(hSharedSecret SECRET_HANDLE, pwszKDF *uint16, pParameterList *BufferDesc, ...) (ntstatus error)
- func DestroyHash(hHash HASH_HANDLE) (ntstatus error)
- func DestroyKey(hKey KEY_HANDLE) (ntstatus error)
- func DestroySecret(hSecret SECRET_HANDLE) (ntstatus error)
- func DuplicateHash(hHash HASH_HANDLE, phNewHash *HASH_HANDLE, pbHashObject []byte, dwFlags uint32) (ntstatus error)
- func Encapsulate(hKey KEY_HANDLE, pbSecret []byte, pcbResult *uint32, pbCiphertext []byte, ...) (ntstatus error)
- func Encrypt(hKey KEY_HANDLE, plaintext []byte, pPaddingInfo unsafe.Pointer, pbIV []byte, ...) (ntstatus error)
- func ExportKey(hKey KEY_HANDLE, hExportKey KEY_HANDLE, pszBlobType *uint16, pbOutput []byte, ...) (ntstatus error)
- func FinalizeKeyPair(hKey KEY_HANDLE, dwFlags uint32) (ntstatus error)
- func FinishHash(hHash HASH_HANDLE, pbOutput []byte, dwFlags uint32) (ntstatus error)
- func GenRandom(hAlgorithm ALG_HANDLE, pbBuffer []byte, dwFlags uint32) (ntstatus error)
- func GenerateKeyPair(hAlgorithm ALG_HANDLE, phKey *KEY_HANDLE, dwLength uint32, dwFlags uint32) (ntstatus error)
- func GenerateSymmetricKey(hAlgorithm ALG_HANDLE, phKey *KEY_HANDLE, pbKeyObject []byte, pbSecret []byte, ...) error
- func GetFipsAlgorithmMode(enabled *bool) (ntstatus error)
- func GetProperty(hObject HANDLE, pszProperty *uint16, pbOutput []byte, pcbResult *uint32, ...) (ntstatus error)
- func Hash(hAlgorithm ALG_HANDLE, pbSecret []byte, pbInput []byte, pbOutput []byte) (ntstatus error)
- func HashData(hHash HASH_HANDLE, pbInput []byte, dwFlags uint32) (ntstatus error)
- func HashDataRaw(hHash HASH_HANDLE, pbInput *byte, cbInput uint32, dwFlags uint32) (ntstatus error)
- func ImportKeyPair(hAlgorithm ALG_HANDLE, hImportKey KEY_HANDLE, pszBlobType *uint16, ...) (ntstatus error)
- func KeyDerivation(hKey KEY_HANDLE, pParameterList *BufferDesc, pbDerivedKey []byte, ...) (ntstatus error)
- func OpenAlgorithmProvider(phAlgorithm *ALG_HANDLE, pszAlgId *uint16, pszImplementation *uint16, ...) (ntstatus error)
- func SecretAgreement(hPrivKey KEY_HANDLE, hPubKey KEY_HANDLE, phAgreedSecret *SECRET_HANDLE, ...) (ntstatus error)
- func SetProperty(hObject HANDLE, pszProperty *uint16, pbInput []byte, dwFlags uint32) (ntstatus error)
- func SignHash(hKey KEY_HANDLE, pPaddingInfo unsafe.Pointer, pbInput []byte, pbOutput []byte, ...) (ntstatus error)
- func VerifySignature(hKey KEY_HANDLE, pPaddingInfo unsafe.Pointer, pbHash []byte, ...) (ntstatus error)
- type ALG_HANDLE
- type AUTHENTICATED_CIPHER_MODE_INFO
- type AlgorithmProviderFlags
- type Buffer
- type BufferDesc
- type DSAFIPSVERSION_ENUM
- type DSA_KEY_BLOB
- type DSA_KEY_BLOB_V2
- type DSA_PARAMETER_HEADER
- type DSA_PARAMETER_HEADER_V2
- type ECCKEY_BLOB
- type HANDLE
- type HASHALGORITHM_ENUM
- type HASH_HANDLE
- type KEY_DATA_BLOB_HEADER
- type KEY_HANDLE
- type KEY_LENGTHS_STRUCT
- type KeyBlobMagicNumber
- type MLKEM_KEY_BLOB
- type NTStatus
- type OAEP_PADDING_INFO
- type PKCS1_PADDING_INFO
- type PSS_PADDING_INFO
- type PadMode
- type RSAKEY_BLOB
- type SECRET_HANDLE
Constants ¶
const ( SHA1_ALGORITHM = "SHA1" SHA256_ALGORITHM = "SHA256" SHA384_ALGORITHM = "SHA384" SHA512_ALGORITHM = "SHA512" SHA3_256_ALGORITHM = "SHA3-256" SHA3_384_ALGORITHM = "SHA3-384" SHA3_512_ALGORITHM = "SHA3-512" CSHAKE128_ALGORITHM = "CSHAKE128" CSHAKE256_ALGORITHM = "CSHAKE256" AES_ALGORITHM = "AES" RC4_ALGORITHM = "RC4" RSA_ALGORITHM = "RSA" MD4_ALGORITHM = "MD4" MD5_ALGORITHM = "MD5" ECDSA_ALGORITHM = "ECDSA" ECDH_ALGORITHM = "ECDH" HKDF_ALGORITHM = "HKDF" PBKDF2_ALGORITHM = "PBKDF2" DES_ALGORITHM = "DES" DES3_ALGORITHM = "3DES" // 3DES_ALGORITHM TLS1_1_KDF_ALGORITHM = "TLS1_1_KDF" TLS1_2_KDF_ALGORITHM = "TLS1_2_KDF" DSA_ALGORITHM = "DSA" MLKEM_ALGORITHM = "ML-KEM" CHACHA20_POLY1305_ALGORITHM = "CHACHA20_POLY1305" )
const ( ECC_CURVE_25519 = "curve25519" ECC_CURVE_NISTP224 = "nistP224" ECC_CURVE_NISTP256 = "nistP256" ECC_CURVE_NISTP384 = "nistP384" ECC_CURVE_NISTP521 = "nistP521" )
const ( HASH_LENGTH = "HashDigestLength" HASH_BLOCK_LENGTH = "HashBlockLength" CHAINING_MODE = "ChainingMode" CHAIN_MODE_ECB = "ChainingModeECB" CHAIN_MODE_CBC = "ChainingModeCBC" CHAIN_MODE_GCM = "ChainingModeGCM" KEY_LENGTH = "KeyLength" KEY_LENGTHS = "KeyLengths" SIGNATURE_LENGTH = "SignatureLength" BLOCK_LENGTH = "BlockLength" ECC_CURVE_NAME = "ECCCurveName" FUNCTION_NAME_STRING = "FunctionNameString" CUSTOMIZATION_STRING = "CustomizationString" )
const ( RSAPUBLIC_KEY_BLOB = "RSAPUBLICBLOB" RSAFULLPRIVATE_BLOB = "RSAFULLPRIVATEBLOB" ECCPUBLIC_BLOB = "ECCPUBLICBLOB" ECCPRIVATE_BLOB = "ECCPRIVATEBLOB" DSA_PUBLIC_BLOB = "DSAPUBLICBLOB" DSA_PRIVATE_BLOB = "DSAPRIVATEBLOB" MLKEM_PUBLIC_BLOB = "MLKEMPUBLICBLOB" MLKEM_PRIVATE_SEED_BLOB = "MLKEMPRIVATESEEDBLOB" )
const ( KDF_HKDF_INFO = 0x14 HKDF_HASH_ALGORITHM = "HkdfHashAlgorithm" HKDF_SALT_AND_FINALIZE = "HkdfSaltAndFinalize" HKDF_PRK_AND_FINALIZE = "HkdfPrkAndFinalize" )
const ( KDF_HASH_ALGORITHM = 0x0 KDF_TLS_PRF_LABEL = 0x4 KDF_TLS_PRF_SEED = 0x5 KDF_TLS_PRF_PROTOCOL = 0x6 KDF_ITERATION_COUNT = 0x10 KDF_SALT = 0xF )
const ( KEY_DATA_BLOB = "KeyDataBlob" KEY_DATA_BLOB_MAGIC = 0x4d42444b KEY_DATA_BLOB_VERSION1 = 1 )
const ( HASH_DONT_RESET_FLAG = 0x00000001 HASH_REUSABLE_FLAG = 0x00000020 )
const ( // ML-KEM related properties and constants PARAMETER_SET_NAME = "ParameterSetName" MLKEM_PARAMETER_SET_768 = "768" MLKEM_PARAMETER_SET_1024 = "1024" )
const ( FORMAT_MESSAGE_FROM_HMODULE = 2048 FORMAT_MESSAGE_FROM_SYSTEM = 4096 FORMAT_MESSAGE_ARGUMENT_ARRAY = 8192 LANG_ENGLISH = 0x09 SUBLANG_ENGLISH_US = 0x01 )
const (
DSA_PARAMETERS = "DSAParameters"
)
const (
KDF_RAW_SECRET = "TRUNCATE"
)
const (
USE_SYSTEM_PREFERRED_RNG = 0x00000002
)
Variables ¶
This section is empty.
Functions ¶
func CloseAlgorithmProvider ¶
func CloseAlgorithmProvider(hAlgorithm ALG_HANDLE, dwFlags uint32) (ntstatus error)
func CreateHash ¶
func CreateHash(hAlgorithm ALG_HANDLE, phHash *HASH_HANDLE, pbHashObject []byte, pbSecret []byte, dwFlags uint32) (ntstatus error)
func Decapsulate ¶
func DeriveKey ¶
func DeriveKey(hSharedSecret SECRET_HANDLE, pwszKDF *uint16, pParameterList *BufferDesc, pbDerivedKey []byte, pcbResult *uint32, dwFlags uint32) (ntstatus error)
func DestroyHash ¶
func DestroyHash(hHash HASH_HANDLE) (ntstatus error)
func DestroyKey ¶
func DestroyKey(hKey KEY_HANDLE) (ntstatus error)
func DestroySecret ¶
func DestroySecret(hSecret SECRET_HANDLE) (ntstatus error)
func DuplicateHash ¶
func DuplicateHash(hHash HASH_HANDLE, phNewHash *HASH_HANDLE, pbHashObject []byte, dwFlags uint32) (ntstatus error)
func Encapsulate ¶
func ExportKey ¶
func ExportKey(hKey KEY_HANDLE, hExportKey KEY_HANDLE, pszBlobType *uint16, pbOutput []byte, pcbResult *uint32, dwFlags uint32) (ntstatus error)
func FinalizeKeyPair ¶
func FinalizeKeyPair(hKey KEY_HANDLE, dwFlags uint32) (ntstatus error)
func FinishHash ¶
func FinishHash(hHash HASH_HANDLE, pbOutput []byte, dwFlags uint32) (ntstatus error)
func GenRandom ¶
func GenRandom(hAlgorithm ALG_HANDLE, pbBuffer []byte, dwFlags uint32) (ntstatus error)
func GenerateKeyPair ¶
func GenerateKeyPair(hAlgorithm ALG_HANDLE, phKey *KEY_HANDLE, dwLength uint32, dwFlags uint32) (ntstatus error)
func GenerateSymmetricKey ¶
func GenerateSymmetricKey(hAlgorithm ALG_HANDLE, phKey *KEY_HANDLE, pbKeyObject []byte, pbSecret []byte, dwFlags uint32) error
func GetFipsAlgorithmMode ¶
func GetProperty ¶
func Hash ¶
func Hash(hAlgorithm ALG_HANDLE, pbSecret []byte, pbInput []byte, pbOutput []byte) (ntstatus error)
func HashDataRaw ¶
func HashDataRaw(hHash HASH_HANDLE, pbInput *byte, cbInput uint32, dwFlags uint32) (ntstatus error)
func ImportKeyPair ¶
func ImportKeyPair(hAlgorithm ALG_HANDLE, hImportKey KEY_HANDLE, pszBlobType *uint16, phKey *KEY_HANDLE, pbInput []byte, dwFlags uint32) (ntstatus error)
func KeyDerivation ¶
func KeyDerivation(hKey KEY_HANDLE, pParameterList *BufferDesc, pbDerivedKey []byte, pcbResult *uint32, dwFlags uint32) (ntstatus error)
func OpenAlgorithmProvider ¶
func OpenAlgorithmProvider(phAlgorithm *ALG_HANDLE, pszAlgId *uint16, pszImplementation *uint16, dwFlags AlgorithmProviderFlags) (ntstatus error)
func SecretAgreement ¶
func SecretAgreement(hPrivKey KEY_HANDLE, hPubKey KEY_HANDLE, phAgreedSecret *SECRET_HANDLE, dwFlags uint32) (ntstatus error)
func SetProperty ¶
func VerifySignature ¶
Types ¶
type ALG_HANDLE ¶
type ALG_HANDLE HANDLE
type AUTHENTICATED_CIPHER_MODE_INFO ¶
type AUTHENTICATED_CIPHER_MODE_INFO struct {
Size uint32
InfoVersion uint32
Nonce *byte
NonceSize uint32
AuthData *byte
AuthDataSize uint32
Tag *byte
TagSize uint32
MacContext *byte
MacContextSize uint32
AADSize uint32
DataSize uint64
Flags uint32
}
func NewAUTHENTICATED_CIPHER_MODE_INFO ¶
func NewAUTHENTICATED_CIPHER_MODE_INFO(nonce, additionalData, tag []byte) *AUTHENTICATED_CIPHER_MODE_INFO
type AlgorithmProviderFlags ¶
type AlgorithmProviderFlags uint32
const ( ALG_NONE_FLAG AlgorithmProviderFlags = 0x00000000 ALG_HANDLE_HMAC_FLAG AlgorithmProviderFlags = 0x00000008 )
type BufferDesc ¶
type DSAFIPSVERSION_ENUM ¶
type DSAFIPSVERSION_ENUM uint32
const ( DSA_FIPS186_2 DSAFIPSVERSION_ENUM = iota DSA_FIPS186_3 )
type DSA_KEY_BLOB ¶
type DSA_KEY_BLOB struct {
Magic KeyBlobMagicNumber
KeySize uint32
Count [4]uint8
Seed [20]uint8
Q [20]uint8
}
https://learn.microsoft.com/en-us/windows/win32/api/bcrypt/ns-bcrypt-bcrypt_dsa_key_blob
type DSA_KEY_BLOB_V2 ¶
type DSA_KEY_BLOB_V2 struct {
Magic KeyBlobMagicNumber
KeySize uint32
HashAlgorithm HASHALGORITHM_ENUM
StandardVersion DSAFIPSVERSION_ENUM
SeedLength uint32
GroupSize uint32
Count [4]uint8
}
https://learn.microsoft.com/en-us/windows/win32/api/bcrypt/ns-bcrypt-bcrypt_dsa_key_blob_v2
type DSA_PARAMETER_HEADER ¶
type DSA_PARAMETER_HEADER_V2 ¶
type DSA_PARAMETER_HEADER_V2 struct {
Length uint32
Magic KeyBlobMagicNumber
KeySize uint32
HashAlgorithm HASHALGORITHM_ENUM
StandardVersion DSAFIPSVERSION_ENUM
SeedLength uint32
GroupSize uint32
Count [4]uint8
}
type ECCKEY_BLOB ¶
type ECCKEY_BLOB struct {
Magic KeyBlobMagicNumber
KeySize uint32
}
https://docs.microsoft.com/en-us/windows/win32/api/bcrypt/ns-bcrypt-bcrypt_ecckey_blob
type HASHALGORITHM_ENUM ¶
type HASHALGORITHM_ENUM uint32
const ( DSA_HASH_ALGORITHM_SHA1 HASHALGORITHM_ENUM = iota DSA_HASH_ALGORITHM_SHA256 DSA_HASH_ALGORITHM_SHA512 )
type HASH_HANDLE ¶
type HASH_HANDLE HANDLE
type KEY_DATA_BLOB_HEADER ¶
type KEY_HANDLE ¶
type KEY_HANDLE HANDLE
type KEY_LENGTHS_STRUCT ¶
https://docs.microsoft.com/en-us/windows/win32/api/bcrypt/ns-bcrypt-bcrypt_key_lengths_struct
type KeyBlobMagicNumber ¶
type KeyBlobMagicNumber uint32
const ( RSAPUBLIC_MAGIC KeyBlobMagicNumber = 0x31415352 RSAFULLPRIVATE_MAGIC KeyBlobMagicNumber = 0x33415352 ECDSA_PUBLIC_GENERIC_MAGIC KeyBlobMagicNumber = 0x50444345 ECDSA_PRIVATE_GENERIC_MAGIC KeyBlobMagicNumber = 0x56444345 ECDH_PUBLIC_GENERIC_MAGIC KeyBlobMagicNumber = 0x504B4345 ECDH_PRIVATE_GENERIC_MAGIC KeyBlobMagicNumber = 0x564B4345 DSA_PARAMETERS_MAGIC KeyBlobMagicNumber = 0x4d505344 DSA_PUBLIC_MAGIC KeyBlobMagicNumber = 0x42505344 DSA_PRIVATE_MAGIC KeyBlobMagicNumber = 0x56505344 DSA_PARAMETERS_MAGIC_V2 KeyBlobMagicNumber = 0x324d5044 DSA_PUBLIC_MAGIC_V2 KeyBlobMagicNumber = 0x32425044 DSA_PRIVATE_MAGIC_V2 KeyBlobMagicNumber = 0x32565044 MLKEM_PUBLIC_MAGIC KeyBlobMagicNumber = 0x504B4C4D MLKEM_PRIVATE_MAGIC KeyBlobMagicNumber = 0x524B4C4D MLKEM_PRIVATE_SEED_MAGIC KeyBlobMagicNumber = 0x534B4C4D )
type MLKEM_KEY_BLOB ¶
type MLKEM_KEY_BLOB struct {
Magic KeyBlobMagicNumber
}
https://learn.microsoft.com/en-us/windows/win32/seccng/cng-mlkem
type OAEP_PADDING_INFO ¶
https://docs.microsoft.com/en-us/windows/win32/api/bcrypt/ns-bcrypt-bcrypt_oaep_padding_info
type PKCS1_PADDING_INFO ¶
type PKCS1_PADDING_INFO struct {
AlgId *uint16
}
https://docs.microsoft.com/en-us/windows/win32/api/bcrypt/ns-bcrypt-bcrypt_pkcs1_padding_info
type PSS_PADDING_INFO ¶
https://docs.microsoft.com/en-us/windows/win32/api/bcrypt/ns-bcrypt-bcrypt_pss_padding_info
type RSAKEY_BLOB ¶
type RSAKEY_BLOB struct {
Magic KeyBlobMagicNumber
BitLength uint32
PublicExpSize uint32
ModulusSize uint32
Prime1Size uint32
Prime2Size uint32
}
https://docs.microsoft.com/en-us/windows/win32/api/bcrypt/ns-bcrypt-bcrypt_rsakey_blob
type SECRET_HANDLE ¶
type SECRET_HANDLE HANDLE