
TYPES = """
typedef struct dsa_st {
    // prime number (public)
    BIGNUM *p;
    // 160-bit subprime, q | p-1 (public)
    BIGNUM *q;
    // generator of subgroup (public)
    BIGNUM *g;
    // private key x
    BIGNUM *priv_key;
    // public key y = g^x
    BIGNUM *pub_key;
    ...;
} DSA;
"""

FUNCTIONS = """
DSA *DSA_generate_parameters(int, unsigned char *, int, int *, unsigned long *,
                             void (*)(int, int, void *), void *);
int DSA_generate_key(DSA *);
void DSA_free(DSA *);
"""

MACROS = """
"""

CUSTOMIZATIONS = """
"""

CONDITIONAL_NAMES = {}


TYPES = """
typedef struct dsa_st {
    // prime number (public)
    BIGNUM *p;
    // 160-bit subprime, q | p-1 (public)
    BIGNUM *q;
    // generator of subgroup (public)
    BIGNUM *g;
    // private key x
    BIGNUM *priv_key;
    // public key y = g^x
    BIGNUM *pub_key;
    ...;
} DSA;
"""

FUNCTIONS = """
DSA *DSA_generate_parameters(int, unsigned char *, int, int *, unsigned long *,
                             void (*)(int, int, void *), void *);
int DSA_generate_key(DSA *);
void DSA_free(DSA *);
"""

MACROS = """
int DSA_generate_parameters_ex(DSA *, int, unsigned char *, int,
                               int *, unsigned long *, BN_GENCB *);
"""

CUSTOMIZATIONS = """
"""

CONDITIONAL_NAMES = {}

Add binding for the DSA parameters generation function
Add binding for the DSA parameters generation function

  
  TYPES = """
  typedef struct dsa_st {
      // prime number (public)
      BIGNUM *p;
      // 160-bit subprime, q | p-1 (public)
      BIGNUM *q;
      // generator of subgroup (public)
      BIGNUM *g;
      // private key x
      BIGNUM *priv_key;
      // public key y = g^x
      BIGNUM *pub_key;
      ...;
  } DSA;
  """
  
  FUNCTIONS = """
  DSA *DSA_generate_parameters(int, unsigned char *, int, int *, unsigned long *,
                               void (*)(int, int, void *), void *);
  int DSA_generate_key(DSA *);
  void DSA_free(DSA *);
  """
  
  MACROS = """
+ int DSA_generate_parameters_ex(DSA *, int, unsigned char *, int,
+                                int *, unsigned long *, BN_GENCB *);
  """
  
  CUSTOMIZATIONS = """
  """
  
  CONDITIONAL_NAMES = {}
  
Add binding for the DSA parameters generation function
## Code Before:

TYPES = """
typedef struct dsa_st {
    // prime number (public)
    BIGNUM *p;
    // 160-bit subprime, q | p-1 (public)
    BIGNUM *q;
    // generator of subgroup (public)
    BIGNUM *g;
    // private key x
    BIGNUM *priv_key;
    // public key y = g^x
    BIGNUM *pub_key;
    ...;
} DSA;
"""

FUNCTIONS = """
DSA *DSA_generate_parameters(int, unsigned char *, int, int *, unsigned long *,
                             void (*)(int, int, void *), void *);
int DSA_generate_key(DSA *);
void DSA_free(DSA *);
"""

MACROS = """
"""

CUSTOMIZATIONS = """
"""

CONDITIONAL_NAMES = {}

## Instruction:
Add binding for the DSA parameters generation function
## Code After:

TYPES = """
typedef struct dsa_st {
    // prime number (public)
    BIGNUM *p;
    // 160-bit subprime, q | p-1 (public)
    BIGNUM *q;
    // generator of subgroup (public)
    BIGNUM *g;
    // private key x
    BIGNUM *priv_key;
    // public key y = g^x
    BIGNUM *pub_key;
    ...;
} DSA;
"""

FUNCTIONS = """
DSA *DSA_generate_parameters(int, unsigned char *, int, int *, unsigned long *,
                             void (*)(int, int, void *), void *);
int DSA_generate_key(DSA *);
void DSA_free(DSA *);
"""

MACROS = """
int DSA_generate_parameters_ex(DSA *, int, unsigned char *, int,
                               int *, unsigned long *, BN_GENCB *);
"""

CUSTOMIZATIONS = """
"""

CONDITIONAL_NAMES = {}
