Webserver+3d print
Diff: cyclone_crypto/dsa.h
- Revision:
- 0:8918a71cdbe9
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cyclone_crypto/dsa.h Sat Feb 04 18:15:49 2017 +0000 @@ -0,0 +1,107 @@ +/** + * @file dsa.h + * @brief DSA (Digital Signature Algorithm) + * + * @section License + * + * Copyright (C) 2010-2017 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. + * + * @author Oryx Embedded SARL (www.oryx-embedded.com) + * @version 1.7.6 + **/ + +#ifndef _DSA_H +#define _DSA_H + +//Dependencies +#include "crypto.h" +#include "mpi.h" + + +/** + * @brief DSA public key + **/ + +typedef struct +{ + Mpi p; ///<Prime modulus + Mpi q; ///<Prime divisor + Mpi g; ///<Generator of the subgroup + Mpi y; ///<Public key +} DsaPublicKey; + + +/** + * @brief DSA private key + **/ + +typedef struct +{ + Mpi p; ///<Prime modulus + Mpi q; ///<<Prime divisor + Mpi g; ///<Generator of the subgroup + Mpi x; ///<Private key +} DsaPrivateKey; + + +/** + * @brief DSA signature + **/ + +typedef struct +{ + Mpi r; + Mpi s; +} DsaSignature; + + +//DSA related constants +extern const uint8_t DSA_OID[7]; +extern const uint8_t DSA_WITH_SHA1_OID[7]; +extern const uint8_t DSA_WITH_SHA224_OID[9]; +extern const uint8_t DSA_WITH_SHA256_OID[9]; +extern const uint8_t DSA_WITH_SHA384_OID[9]; +extern const uint8_t DSA_WITH_SHA512_OID[9]; +extern const uint8_t DSA_WITH_SHA3_224_OID[9]; +extern const uint8_t DSA_WITH_SHA3_256_OID[9]; +extern const uint8_t DSA_WITH_SHA3_384_OID[9]; +extern const uint8_t DSA_WITH_SHA3_512_OID[9]; + +//DSA related functions +void dsaInitPublicKey(DsaPublicKey *key); +void dsaFreePublicKey(DsaPublicKey *key); + +void dsaInitPrivateKey(DsaPrivateKey *key); +void dsaFreePrivateKey(DsaPrivateKey *key); + +void dsaInitSignature(DsaSignature *signature); +void dsaFreeSignature(DsaSignature *signature); + +error_t dsaWriteSignature(const DsaSignature *signature, uint8_t *data, size_t *length); +error_t dsaReadSignature(const uint8_t *data, size_t length, DsaSignature *signature); + +error_t dsaGenerateSignature(const PrngAlgo *prngAlgo, void *prngContext, + const DsaPrivateKey *key, const uint8_t *digest, size_t digestLength, + DsaSignature *signature); + +error_t dsaVerifySignature(const DsaPublicKey *key, + const uint8_t *digest, size_t digestLength, const DsaSignature *signature); + +#endif +