Home | History | Annotate | Download | only in dsa
      1 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
      2  *
      3  * LibTomCrypt is a library that provides various cryptographic
      4  * algorithms in a highly modular and flexible manner.
      5  *
      6  * The library is free for all purposes without any express
      7  * guarantee it works.
      8  *
      9  * Tom St Denis, tomstdenis (at) gmail.com, http://libtomcrypt.com
     10  */
     11 #include "tomcrypt.h"
     12 
     13 /**
     14    @file dsa_export.c
     15    DSA implementation, export key, Tom St Denis
     16 */
     17 
     18 #ifdef MDSA
     19 
     20 /**
     21   Export a DSA key to a binary packet
     22   @param out    [out] Where to store the packet
     23   @param outlen [in/out] The max size and resulting size of the packet
     24   @param type   The type of key to export (PK_PRIVATE or PK_PUBLIC)
     25   @param key    The key to export
     26   @return CRYPT_OK if successful
     27 */
     28 int dsa_export(unsigned char *out, unsigned long *outlen, int type, dsa_key *key)
     29 {
     30    unsigned char flags[1];
     31 
     32    LTC_ARGCHK(out    != NULL);
     33    LTC_ARGCHK(outlen != NULL);
     34    LTC_ARGCHK(key    != NULL);
     35 
     36    /* can we store the static header?  */
     37    if (type == PK_PRIVATE && key->type != PK_PRIVATE) {
     38       return CRYPT_PK_TYPE_MISMATCH;
     39    }
     40 
     41    if (type != PK_PUBLIC && type != PK_PRIVATE) {
     42       return CRYPT_INVALID_ARG;
     43    }
     44 
     45    flags[0] = (type != PK_PUBLIC) ? 1 : 0;
     46 
     47    if (type == PK_PRIVATE) {
     48       return der_encode_sequence_multi(out, outlen,
     49                                  LTC_ASN1_BIT_STRING,   1UL, flags,
     50                                  LTC_ASN1_INTEGER,      1UL, key->g,
     51                                  LTC_ASN1_INTEGER,      1UL, key->p,
     52                                  LTC_ASN1_INTEGER,      1UL, key->q,
     53                                  LTC_ASN1_INTEGER,      1UL, key->y,
     54                                  LTC_ASN1_INTEGER,      1UL, key->x,
     55                                  LTC_ASN1_EOL,          0UL, NULL);
     56    } else {
     57       return der_encode_sequence_multi(out, outlen,
     58                                  LTC_ASN1_BIT_STRING,   1UL, flags,
     59                                  LTC_ASN1_INTEGER,      1UL, key->g,
     60                                  LTC_ASN1_INTEGER,      1UL, key->p,
     61                                  LTC_ASN1_INTEGER,      1UL, key->q,
     62                                  LTC_ASN1_INTEGER,      1UL, key->y,
     63                                  LTC_ASN1_EOL,          0UL, NULL);
     64    }
     65 }
     66 
     67 #endif
     68 
     69 
     70 /* $Source: /cvs/libtom/libtomcrypt/src/pk/dsa/dsa_export.c,v $ */
     71 /* $Revision: 1.8 $ */
     72 /* $Date: 2006/03/31 14:15:35 $ */
     73