Exemple #1
0
 * STACK_OF(ASN1_TYPE) *set; ASN1_TYPE *single; } value; } X509_ATTRIBUTE;
 * this needs some extra thought because the CHOICE type is merged with the
 * main structure and because the value can be anything at all we *must* try
 * the SET OF first because the ASN1_ANY type will swallow anything including
 * the whole SET OF structure.
 */

ASN1_CHOICE(X509_ATTRIBUTE_SET) = {
        ASN1_SET_OF(X509_ATTRIBUTE, value.set, ASN1_ANY),
        ASN1_SIMPLE(X509_ATTRIBUTE, value.single, ASN1_ANY)
} ASN1_CHOICE_END_selector(X509_ATTRIBUTE, X509_ATTRIBUTE_SET, single)

ASN1_SEQUENCE(X509_ATTRIBUTE) = {
        ASN1_SIMPLE(X509_ATTRIBUTE, object, ASN1_OBJECT),
        /* CHOICE type merged with parent */
        ASN1_EX_COMBINE(0, 0, X509_ATTRIBUTE_SET)
} ASN1_SEQUENCE_END(X509_ATTRIBUTE)

IMPLEMENT_ASN1_FUNCTIONS(X509_ATTRIBUTE)
IMPLEMENT_ASN1_DUP_FUNCTION(X509_ATTRIBUTE)

X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value)
{
    X509_ATTRIBUTE *ret = NULL;
    ASN1_TYPE *val = NULL;

    if ((ret = X509_ATTRIBUTE_new()) == NULL)
        return (NULL);
    /* TODO(fork): const correctness. */
    ret->object = (ASN1_OBJECT *)OBJ_nid2obj(nid);
    ret->single = 0;
IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(DSA, DSAPrivateKey, DSAPrivateKey)

ASN1_SEQUENCE_cb(DSAparams, dsa_cb) = {
	ASN1_SIMPLE(DSA, p, BIGNUM),
	ASN1_SIMPLE(DSA, q, BIGNUM),
	ASN1_SIMPLE(DSA, g, BIGNUM),
} ASN1_SEQUENCE_END_cb(DSA, DSAparams)

IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(DSA, DSAparams, DSAparams)

/* DSA public key is a bit trickier... its effectively a CHOICE type
 * decided by a field called write_params which can either write out
 * just the public key as an INTEGER or the parameters and public key
 * in a SEQUENCE
 */

ASN1_SEQUENCE(dsa_pub_internal) = {
	ASN1_SIMPLE(DSA, pub_key, BIGNUM),
	ASN1_SIMPLE(DSA, p, BIGNUM),
	ASN1_SIMPLE(DSA, q, BIGNUM),
	ASN1_SIMPLE(DSA, g, BIGNUM)
} ASN1_SEQUENCE_END_name(DSA, dsa_pub_internal)

ASN1_CHOICE_cb(DSAPublicKey, dsa_cb) = {
	ASN1_SIMPLE(DSA, pub_key, BIGNUM),
	ASN1_EX_COMBINE(0, 0, dsa_pub_internal)
} ASN1_CHOICE_END_cb(DSA, DSAPublicKey, write_params)

IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(DSA, DSAPublicKey, DSAPublicKey)
Exemple #3
0
ASN1_SIMPLE (DSA, p, BIGNUM), ASN1_SIMPLE (DSA, q, BIGNUM), ASN1_SIMPLE (DSA, g, BIGNUM),}

ASN1_SEQUENCE_END_cb (DSA, DSAparams) IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname (DSA, DSAparams, DSAparams)

/* DSA public key is a bit trickier... its effectively a CHOICE type
 * decided by a field called write_params which can either write out
 * just the public key as an INTEGER or the parameters and public key
 * in a SEQUENCE
 */
    ASN1_SEQUENCE (dsa_pub_internal) =
{
ASN1_SIMPLE (DSA, pub_key, BIGNUM),
        ASN1_SIMPLE (DSA, p, BIGNUM), ASN1_SIMPLE (DSA, q, BIGNUM), ASN1_SIMPLE (DSA, g, BIGNUM)}
ASN1_SEQUENCE_END_name (DSA, dsa_pub_internal) ASN1_CHOICE_cb (DSAPublicKey, dsa_cb) =
{
ASN1_SIMPLE (DSA, pub_key, BIGNUM), ASN1_EX_COMBINE (0, 0, dsa_pub_internal)}

ASN1_CHOICE_END_cb (DSA, DSAPublicKey, write_params)
IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname (DSA, DSAPublicKey, DSAPublicKey)
     DSA *DSAparams_dup (DSA * dsa)
{
    return ASN1_item_dup (ASN1_ITEM_rptr (DSAparams), dsa);
}

int DSA_sign (int type, const unsigned char *dgst, int dlen, unsigned char *sig, unsigned int *siglen, DSA * dsa)
{
    DSA_SIG *s;

    RAND_seed (dgst, dlen);
    s = DSA_do_sign (dgst, dlen, dsa);
    if (s == NULL)