add i2d_DHparams
This commit is contained in:
@@ -37,6 +37,9 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <krb5-types.h>
|
||||||
|
#include <rfc2459_asn1.h>
|
||||||
|
|
||||||
#include <dh.h>
|
#include <dh.h>
|
||||||
|
|
||||||
#include <roken.h>
|
#include <roken.h>
|
||||||
@@ -487,3 +490,63 @@ DH_get_default_method(void)
|
|||||||
return dh_default_method;
|
return dh_default_method;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
static int
|
||||||
|
bn2heim_int(BIGNUM *bn, heim_integer *integer)
|
||||||
|
{
|
||||||
|
integer->length = BN_num_bytes(bn);
|
||||||
|
integer->data = malloc(integer->length);
|
||||||
|
if (integer->data == NULL) {
|
||||||
|
integer->length = 0;
|
||||||
|
return ENOMEM;
|
||||||
|
}
|
||||||
|
BN_bn2bin(bn, integer->data);
|
||||||
|
integer->negative = BN_is_negative(bn);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
int
|
||||||
|
i2d_DHparams(DH *dh, const char **pp)
|
||||||
|
{
|
||||||
|
DHParameter data;
|
||||||
|
size_t size;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
memset(&data, 0, sizeof(data));
|
||||||
|
|
||||||
|
if (bn2heim_int(dh->p, &data.prime) ||
|
||||||
|
bn2heim_int(dh->g, &data.base))
|
||||||
|
{
|
||||||
|
free_DHParameter(&data);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pp == NULL) {
|
||||||
|
size = length_DHParameter(&data);
|
||||||
|
free_DHParameter(&data);
|
||||||
|
} else {
|
||||||
|
void *p;
|
||||||
|
size_t len;
|
||||||
|
|
||||||
|
ASN1_MALLOC_ENCODE(DHParameter, p, len, &data, &size, ret);
|
||||||
|
free_DHParameter(&data);
|
||||||
|
if (ret)
|
||||||
|
return -1;
|
||||||
|
if (len != size)
|
||||||
|
abort();
|
||||||
|
|
||||||
|
memcpy(*pp, p, size);
|
||||||
|
free(p);
|
||||||
|
|
||||||
|
*pp += size;
|
||||||
|
}
|
||||||
|
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user