[Help-gnutls] Re: Getting keys for my own crtypto functions (opencdk)
Mario Lenz
mario.lenz at gmx.net
Sun Jan 14 15:18:04 CET 2007
Hi!
> > Would you please have a look at these functions? If you think they're ok
> > I'll do some tests:
>
> Hi! Yes, that was what I had in mind.
I've done some tests now and everything's working.
to be included in opencdk.h:
cdk_error_t cdk_pubkey_to_sexp (cdk_pkt_pubkey_t pk, char **sexp, size_t * len);
cdk_error_t cdk_seckey_to_sexp (cdk_pkt_seckey_t sk, char **sexp, size_t * len);
to be added to src/pubkey.c:
/**
* cdk_pubkey_to_sexp:
* @pk: the public key
* @sexp: where to store the S- expression
* @len: the length of sexp
*
* Convert a public key to an S- expression. sexp is allocated
* by this function, but you have to cdk_free() it yourself.
* The S- expression is stored in canonical format as used by
* libgcrypt (GCRYSEXP_FMT_CANON).
**/
cdk_error_t
cdk_pubkey_to_sexp (cdk_pkt_pubkey_t pk, char **sexp, size_t * len)
{
int rc;
char *buf;
size_t sexp_len;
gcry_sexp_t pk_sexp;
if (!pk || !sexp)
return CDK_Inv_Value;
rc = pubkey_to_sexp (&pk_sexp, pk);
if (rc)
return rc;
sexp_len = gcry_sexp_sprint (pk_sexp, GCRYSEXP_FMT_CANON, NULL, 0);
if (!sexp_len)
{
return CDK_Gcry_Error;
}
buf = (char *) cdk_malloc (sexp_len);
if (!buf)
{
gcry_sexp_release (pk_sexp);
return CDK_Out_Of_Core;
}
sexp_len =
gcry_sexp_sprint (pk_sexp, GCRYSEXP_FMT_CANON, buf, sexp_len);
gcry_sexp_release (pk_sexp);
if (!sexp_len)
{
cdk_free (buf);
return CDK_Gcry_Error;
}
if (len)
*len = sexp_len;
*sexp = buf;
return CDK_Success;
}
/**
* cdk_seckey_to_sexp:
* @sk: the secret key
* @sexp: where to store the S- expression
* @len: the length of sexp
*
* Convert a public key to an S- expression. sexp is allocated
* by this function, but you have to cdk_free() it yourself.
* The S- expression is stored in canonical format as used by
* libgcrypt (GCRYSEXP_FMT_CANON).
**/
cdk_error_t
cdk_seckey_to_sexp (cdk_pkt_seckey_t sk, char **sexp, size_t * len)
{
int rc;
char *buf;
size_t sexp_len;
gcry_sexp_t sk_sexp;
if (!sk || !sexp)
return CDK_Inv_Value;
rc = seckey_to_sexp (&sk_sexp, sk);
if (rc)
return rc;
sexp_len = gcry_sexp_sprint (sk_sexp, GCRYSEXP_FMT_CANON, NULL, 0);
if (!sexp_len)
{
return CDK_Gcry_Error;
}
buf = (char *) cdk_malloc (sexp_len);
if (!buf)
{
gcry_sexp_release (sk_sexp);
return CDK_Out_Of_Core;
}
sexp_len =
gcry_sexp_sprint (sk_sexp, GCRYSEXP_FMT_CANON, buf, sexp_len);
gcry_sexp_release (sk_sexp);
if (!sexp_len)
{
cdk_free (buf);
return CDK_Gcry_Error;
}
if (len)
*len = sexp_len;
*sexp = buf;
return CDK_Success;
}
> Btw, you'll need to assign the copyright of your patch for us to be
> able to use it. I hope this is ok. I'll send you the form privately.
I've sent it just a moment ago.
greez
Mario
More information about the Gnutls-help
mailing list