CryptoSys PQC  1.0.0
Classes | Public Types | Static Public Member Functions | List of all members
crsyspqc::Dsa Class Reference

Digital Signature Algorithm (DSA) methods. More...

Classes

struct  KeyPair
 Structure to receive a key pair (pk, sk) More...
 

Public Types

enum class  Alg
 DSA signature (DSA) algorithm. More...
 
enum  SigOpts : unsigned int
 Signature options. More...
 
enum class  PreHashAlg
 Hash function identifiers for pre-hash signing. More...
 

Static Public Member Functions

static KeyPair KeyGen (Alg alg, const std::string &params="")
 Generate a DSA signing key pair (pk, sk). More...
 
static bvec_t Sign (Alg alg, const bvec_t &msg, const bvec_t &privatekey, SigOpts opts=SigOpts::Default, const bvec_t &context=bvec_t(), const std::string &params="")
 Generate a DSA signature over a message. More...
 
static bvec_t SignPreHash (Alg alg, const bvec_t &msg, PreHashAlg hashAlg, const bvec_t &privatekey, SigOpts opts=SigOpts::Default, const bvec_t &context=bvec_t(), const std::string &params="")
 Generate a DSA signature over a pre-hashed message. More...
 
static bool Verify (Alg alg, const bvec_t &signature, const bvec_t &msg, const bvec_t &publickey, const bvec_t &context=bvec_t(), SigOpts opts=SigOpts::Default)
 Verify a DSA signature over a message. More...
 
static bool VerifyPreHash (Alg alg, const bvec_t &signature, const bvec_t &msg, PreHashAlg hashAlg, const bvec_t &publickey, const bvec_t &context=bvec_t())
 Verify a DSA signature over a pre-hashed message. More...
 
static bvec_t PublicKeyFromPrivate (Alg alg, const bvec_t &privatekey)
 Extract the public key from a private key. More...
 
static int PublicKeySize (Alg alg)
 Return length of public key pk in bytes.
 
static int PrivateKeySize (Alg alg)
 Return length of (expanded) private key sk in bytes.
 
static int SignatureSize (Alg alg)
 Return length of signature in bytes.
 
static std::string AlgName (Alg alg)
 Get algorithm name from its alg code.
 

Detailed Description

Digital Signature Algorithm (DSA) methods.

Member Enumeration Documentation

◆ Alg

enum crsyspqc::Dsa::Alg
strong

DSA signature (DSA) algorithm.

Enumerator
ML_DSA_44 

ML-DSA-44 from FIPS.204 (based on Dilithium2)

ML_DSA_65 

ML-DSA-65 from FIPS.204 (based on Dilithium3)

ML_DSA_87 

ML-DSA-87 from FIPS.204 (based on Dilithium5)

SLH_DSA_SHA2_128S 

SLH-DSA-SHA2-128s from FIPS.205.

SLH_DSA_SHA2_128F 

SLH-DSA-SHA2-128f from FIPS.205.

SLH_DSA_SHA2_192S 

SLH-DSA-SHA2-192s from FIPS.205.

SLH_DSA_SHA2_192F 

SLH-DSA-SHA2-192f from FIPS.205.

SLH_DSA_SHA2_256S 

SLH-DSA-SHA2-256s from FIPS.205.

SLH_DSA_SHA2_256F 

SLH-DSA-SHA2-256f from FIPS.205.

SLH_DSA_SHAKE_128S 

SLH-DSA-SHAKE-128s from FIPS.205.

SLH_DSA_SHAKE_128F 

SLH-DSA-SHAKE-128f from FIPS.205.

SLH_DSA_SHAKE_192S 

SLH-DSA-SHAKE-192s from FIPS.205.

SLH_DSA_SHAKE_192F 

SLH-DSA-SHAKE-192f from FIPS.205.

SLH_DSA_SHAKE_256S 

SLH-DSA-SHAKE-256s from FIPS.205.

SLH_DSA_SHAKE_256F 

SLH-DSA-SHAKE-256f from FIPS.205.

◆ SigOpts

enum crsyspqc::Dsa::SigOpts : unsigned int

Signature options.

Enumerator
Default 

Use default options.

Deterministic 

Use deterministic variant when signing (default = add fresh randomness)

Internal 

Use Sign_internal or Verify_internal algorithm (for testing purposes)

ExternalMu 

Use ExternalMu-ML-DSA.Sign or ExternalMu-ML-DSA.Verify algorithm (ML-DSA only)

◆ PreHashAlg

Hash function identifiers for pre-hash signing.

Enumerator
SHA256 

SHA-256 from FIPS.180-4.

SHA384 

SHA-3846 from FIPS.180-4.

SHA512 

SHA-512 from FIPS.180-4.

SHA224 

SHA-224 from FIPS.180-4.

SHA512_224 

SHA-512/224 from FIPS.180-4.

SHA512_256 

SHA-512/256 from FIPS.180-4.

SHA3_224 

SHA3-2224 from FIPS.202.

SHA3_256 

SHA3-256 from FIPS.202.

SHA3_384 

SHA3-384 from FIPS.202.

SHA3_512 

SHA3-512 from FIPS.202.

SHAKE128_256 

SHAKE-128-128 from FIPS.202.

SHAKE256_512 

SHAKE-256-512 from FIPS.202.

Member Function Documentation

◆ KeyGen()

static KeyPair crsyspqc::Dsa::KeyGen ( Alg  alg,
const std::string &  params = "" 
)
static

Generate a DSA signing key pair (pk, sk).

Parameters
algDSA algorithm.
paramsOptional parameters string. Use to pass a known test random value encoded in hex (default = add fresh randomness). For SLH-DSA pass a 3*n value SK.seed||SK.prf||PK.seed (48/72/96 bytes). For ML-DSA pass a 32-byte value seed (denoted ξ in FIPS.204).
Returns
Key pair in Dsa::KeyPair structure.

◆ Sign()

static bvec_t crsyspqc::Dsa::Sign ( Alg  alg,
const bvec_t msg,
const bvec_t privatekey,
SigOpts  opts = SigOpts::Default,
const bvec_t context = bvec_t(),
const std::string &  params = "" 
)
static

Generate a DSA signature over a message.

Parameters
algDSA algorithm.
msgMessage to be signed.
privatekeyPrivate key sk.
optsSignature options.
contextOptional context string (maximum 255 bytes).
paramsOptional parameters string. Use to pass a known test random value encoded in hexadecimal [default = add fresh randomness if in hedged mode].
Returns
Signature value.
Remarks
When using the ExternalMu-ML-DSA.Sign option (ML-DSA only), pass the value of mu instead of the message in the parameter msg. This must be exactly 64 bytes long. Caller is responsible for computing the value of mu independently prior to input.
For ML-DSA, the private key sk may be passed in expanded form (2560|4032|4896 bytes) or as a 32-byte seed. The key form is detected automatically by its length.

◆ SignPreHash()

static bvec_t crsyspqc::Dsa::SignPreHash ( Alg  alg,
const bvec_t msg,
PreHashAlg  hashAlg,
const bvec_t privatekey,
SigOpts  opts = SigOpts::Default,
const bvec_t context = bvec_t(),
const std::string &  params = "" 
)
static

Generate a DSA signature over a pre-hashed message.

Parameters
algDSA algorithm.
msgHash digest of message to be signed PH_M = PH(M).
hashAlgPre-hash function used to create digest.
privatekeyPrivate key sk.
optsSignature options.
contextOptional context string (maximum 255 bytes).
paramsOptional parameters string. Use to pass a known test random value encoded in hexadecimal [default = add fresh randomness if in hedged mode].
Remarks
The caller is responsible for computing the hash digest independently prior to input. The hash function used must be identifed in the hashAlg parameter.
Returns
Signature value.

◆ Verify()

static bool crsyspqc::Dsa::Verify ( Alg  alg,
const bvec_t signature,
const bvec_t msg,
const bvec_t publickey,
const bvec_t context = bvec_t(),
SigOpts  opts = SigOpts::Default 
)
static

Verify a DSA signature over a message.

Parameters
algDSA algorithm.
signatureSignature value.
msgMessage to be verified.
publickeyPublic key pk.
contextSame context string as used when signing (maximum 255 bytes).
optsVerify options.
Returns
true if signature verifies.

◆ VerifyPreHash()

static bool crsyspqc::Dsa::VerifyPreHash ( Alg  alg,
const bvec_t signature,
const bvec_t msg,
PreHashAlg  hashAlg,
const bvec_t publickey,
const bvec_t context = bvec_t() 
)
static

Verify a DSA signature over a pre-hashed message.

Parameters
algDSA algorithm.
signatureSignature value.
msgHash digest of message to be verified PH_M = PH(M).
hashAlgPre-hash function used to create digest.
publickeyPublic key pk.
contextSame context string as used when signing (maximum 255 bytes).
Returns
true if signature verifies.

◆ PublicKeyFromPrivate()

static bvec_t crsyspqc::Dsa::PublicKeyFromPrivate ( Alg  alg,
const bvec_t privatekey 
)
static

Extract the public key from a private key.

Parameters
algDSA algorithm.
privatekeyPublic key sk.
Returns
Public key pk.
Copyright (C) 2024-25 D.I. Management Services Pty Limited t/a CryptoSys ABN 78 083 210 584 Australia. All rights reserved. <www.di-mgt.com.au> <www.cryptosys.net>. Generated on Sat May 24 2025 20:58:07 by Doxygen 1.9.1.