dsa.c File Reference

DSA (Digital Signature Algorithm) More...

#include "core/crypto.h"
#include "pkc/dsa.h"
#include "mpi/mpi.h"
#include "encoding/asn1.h"
#include "debug.h"

Go to the source code of this file.

Macros

#define TRACE_LEVEL   CRYPTO_TRACE_LEVEL
 

Functions

void dsaInitDomainParameters (DsaDomainParameters *params)
 Initialize DSA domain parameters. More...
 
void dsaFreeDomainParameters (DsaDomainParameters *params)
 Release DSA domain parameters. More...
 
void dsaInitPublicKey (DsaPublicKey *key)
 Initialize a DSA public key. More...
 
void dsaFreePublicKey (DsaPublicKey *key)
 Release a DSA public key. More...
 
void dsaInitPrivateKey (DsaPrivateKey *key)
 Initialize a DSA private key. More...
 
void dsaFreePrivateKey (DsaPrivateKey *key)
 Release a DSA private key. More...
 
void dsaInitSignature (DsaSignature *signature)
 Initialize a DSA signature. More...
 
void dsaFreeSignature (DsaSignature *signature)
 Release a DSA signature. More...
 
error_t dsaWriteSignature (const DsaSignature *signature, uint8_t *data, size_t *length)
 Encode DSA signature using ASN.1. More...
 
error_t dsaReadSignature (const uint8_t *data, size_t length, DsaSignature *signature)
 Read an ASN.1 encoded DSA signature. More...
 
error_t dsaGenerateSignature (const PrngAlgo *prngAlgo, void *prngContext, const DsaPrivateKey *key, const uint8_t *digest, size_t digestLen, DsaSignature *signature)
 DSA signature generation. More...
 
error_t dsaVerifySignature (const DsaPublicKey *key, const uint8_t *digest, size_t digestLen, const DsaSignature *signature)
 DSA signature verification. More...
 

Variables

const uint8_t DSA_OID [7] = {0x2A, 0x86, 0x48, 0xCE, 0x38, 0x04, 0x01}
 
const uint8_t DSA_WITH_SHA1_OID [7] = {0x2A, 0x86, 0x48, 0xCE, 0x38, 0x04, 0x03}
 
const uint8_t DSA_WITH_SHA224_OID [9] = {0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x01}
 
const uint8_t DSA_WITH_SHA256_OID [9] = {0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x02}
 
const uint8_t DSA_WITH_SHA384_OID [9] = {0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x03}
 
const uint8_t DSA_WITH_SHA512_OID [9] = {0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x04}
 
const uint8_t DSA_WITH_SHA3_224_OID [9] = {0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x05}
 
const uint8_t DSA_WITH_SHA3_256_OID [9] = {0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x06}
 
const uint8_t DSA_WITH_SHA3_384_OID [9] = {0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x07}
 
const uint8_t DSA_WITH_SHA3_512_OID [9] = {0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x08}
 

Detailed Description

DSA (Digital Signature Algorithm)

License

SPDX-License-Identifier: GPL-2.0-or-later

Copyright (C) 2010-2024 Oryx Embedded SARL. All rights reserved.

This file is part of CycloneCRYPTO Open.

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

Description

The Digital Signature Algorithm (DSA) is a an algorithm developed by the NSA to generate a digital signature for the authentication of electronic documents. Refer to FIPS 186-3 for more details

Author
Oryx Embedded SARL (www.oryx-embedded.com)
Version
2.4.0

Definition in file dsa.c.

Macro Definition Documentation

◆ TRACE_LEVEL

#define TRACE_LEVEL   CRYPTO_TRACE_LEVEL

Definition at line 38 of file dsa.c.

Function Documentation

◆ dsaFreeDomainParameters()

void dsaFreeDomainParameters ( DsaDomainParameters params)

Release DSA domain parameters.

Parameters
[in]paramsPointer to the DSA domain parameters to free

Definition at line 91 of file dsa.c.

◆ dsaFreePrivateKey()

void dsaFreePrivateKey ( DsaPrivateKey key)

Release a DSA private key.

Parameters
[in]keyPointer to the DSA public key to free

Definition at line 150 of file dsa.c.

◆ dsaFreePublicKey()

void dsaFreePublicKey ( DsaPublicKey key)

Release a DSA public key.

Parameters
[in]keyPointer to the DSA public key to free

Definition at line 119 of file dsa.c.

◆ dsaFreeSignature()

void dsaFreeSignature ( DsaSignature signature)

Release a DSA signature.

Parameters
[in]signaturePointer to the DSA signature to free

Definition at line 177 of file dsa.c.

◆ dsaGenerateSignature()

error_t dsaGenerateSignature ( const PrngAlgo prngAlgo,
void *  prngContext,
const DsaPrivateKey key,
const uint8_t *  digest,
size_t  digestLen,
DsaSignature signature 
)

DSA signature generation.

Parameters
[in]prngAlgoPRNG algorithm
[in]prngContextPointer to the PRNG context
[in]keySigner's DSA private key
[in]digestDigest of the message to be signed
[in]digestLenLength in octets of the digest
[out]signature(R, S) integer pair
Returns
Error code

Definition at line 484 of file dsa.c.

◆ dsaInitDomainParameters()

void dsaInitDomainParameters ( DsaDomainParameters params)

Initialize DSA domain parameters.

Parameters
[in]paramsPointer to the DSA domain parameters to initialize

Definition at line 77 of file dsa.c.

◆ dsaInitPrivateKey()

void dsaInitPrivateKey ( DsaPrivateKey key)

Initialize a DSA private key.

Parameters
[in]keyPointer to the DSA private key to initialize

Definition at line 133 of file dsa.c.

◆ dsaInitPublicKey()

void dsaInitPublicKey ( DsaPublicKey key)

Initialize a DSA public key.

Parameters
[in]keyPointer to the DSA public key to initialize

Definition at line 105 of file dsa.c.

◆ dsaInitSignature()

void dsaInitSignature ( DsaSignature signature)

Initialize a DSA signature.

Parameters
[in]signaturePointer to the DSA signature to initialize

Definition at line 164 of file dsa.c.

◆ dsaReadSignature()

error_t dsaReadSignature ( const uint8_t *  data,
size_t  length,
DsaSignature signature 
)

Read an ASN.1 encoded DSA signature.

Parameters
[in]dataPointer to the ASN.1 structure to decode
[in]lengthLength of the ASN.1 structure
[out]signature(R, S) integer pair
Returns
Error code

Definition at line 349 of file dsa.c.

◆ dsaVerifySignature()

error_t dsaVerifySignature ( const DsaPublicKey key,
const uint8_t *  digest,
size_t  digestLen,
const DsaSignature signature 
)

DSA signature verification.

Parameters
[in]keySigner's DSA public key
[in]digestDigest of the message whose signature is to be verified
[in]digestLenLength in octets of the digest
[in]signature(R, S) integer pair
Returns
Error code

Definition at line 585 of file dsa.c.

◆ dsaWriteSignature()

error_t dsaWriteSignature ( const DsaSignature signature,
uint8_t *  data,
size_t *  length 
)

Encode DSA signature using ASN.1.

Parameters
[in]signature(R, S) integer pair
[out]dataPointer to the buffer where to store the resulting ASN.1 structure
[out]lengthLength of the ASN.1 structure
Returns
Error code

Definition at line 193 of file dsa.c.

Variable Documentation

◆ DSA_OID

const uint8_t DSA_OID[7] = {0x2A, 0x86, 0x48, 0xCE, 0x38, 0x04, 0x01}

Definition at line 51 of file dsa.c.

◆ DSA_WITH_SHA1_OID

const uint8_t DSA_WITH_SHA1_OID[7] = {0x2A, 0x86, 0x48, 0xCE, 0x38, 0x04, 0x03}

Definition at line 53 of file dsa.c.

◆ DSA_WITH_SHA224_OID

const uint8_t DSA_WITH_SHA224_OID[9] = {0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x01}

Definition at line 55 of file dsa.c.

◆ DSA_WITH_SHA256_OID

const uint8_t DSA_WITH_SHA256_OID[9] = {0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x02}

Definition at line 57 of file dsa.c.

◆ DSA_WITH_SHA384_OID

const uint8_t DSA_WITH_SHA384_OID[9] = {0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x03}

Definition at line 59 of file dsa.c.

◆ DSA_WITH_SHA3_224_OID

const uint8_t DSA_WITH_SHA3_224_OID[9] = {0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x05}

Definition at line 63 of file dsa.c.

◆ DSA_WITH_SHA3_256_OID

const uint8_t DSA_WITH_SHA3_256_OID[9] = {0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x06}

Definition at line 65 of file dsa.c.

◆ DSA_WITH_SHA3_384_OID

const uint8_t DSA_WITH_SHA3_384_OID[9] = {0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x07}

Definition at line 67 of file dsa.c.

◆ DSA_WITH_SHA3_512_OID

const uint8_t DSA_WITH_SHA3_512_OID[9] = {0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x08}

Definition at line 69 of file dsa.c.

◆ DSA_WITH_SHA512_OID

const uint8_t DSA_WITH_SHA512_OID[9] = {0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x04}

Definition at line 61 of file dsa.c.