diff options
Diffstat (limited to 'src/util/crypto.c')
-rw-r--r-- | src/util/crypto.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/util/crypto.c b/src/util/crypto.c index 12f452085..25f951e86 100644 --- a/src/util/crypto.c +++ b/src/util/crypto.c @@ -269,6 +269,32 @@ TALER_refresh_encrypt (const struct TALER_RefreshLinkDecrypted *input, /** + * Decode encrypted refresh link information from buffer. + * + * @param buf buffer with refresh link data + * @param buf_len number of bytes in @a buf + * @return NULL on error (@a buf_len too small) + */ +struct TALER_RefreshLinkEncrypted * +TALER_refresh_link_encrypted_decode (const char *buf, + size_t buf_len) +{ + struct TALER_RefreshLinkEncrypted *rle; + + if (buf_len < sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey)) + return NULL; + rle = GNUNET_malloc (sizeof (struct TALER_RefreshLinkEncrypted) + + buf_len - sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey)); + rle->blinding_key_enc = (const char *) &rle[1]; + rle->blinding_key_enc_size = buf_len - sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey); + memcpy (rle->coin_priv_enc, + buf, + buf_len); + return rle; +} + + +/** * Check if a coin is valid; that is, whether the denomination key exists, * is not expired, and the signature is correct. * |