summaryrefslogtreecommitdiff
path: root/src/libpiano/piano.c
diff options
context:
space:
mode:
authorMichał Cichoń <michcic@gmail.com>2015-08-25 06:45:41 +0200
committerMichał Cichoń <michcic@gmail.com>2015-08-25 06:45:41 +0200
commita3bae55d41f5159df3a0125f02a8fa322e81bbe3 (patch)
tree06163f5e15a4902428ece78fb278e3f5429f697b /src/libpiano/piano.c
parent34b6068d229efcb934fa40b5f4d47a46cedae552 (diff)
downloadpianobar-windows-a3bae55d41f5159df3a0125f02a8fa322e81bbe3.tar.gz
pianobar-windows-a3bae55d41f5159df3a0125f02a8fa322e81bbe3.tar.bz2
pianobar-windows-a3bae55d41f5159df3a0125f02a8fa322e81bbe3.zip
libpiano: Abstract out blowfish cipher to PianoCipher_t so different implementations than gcrypt can be used.
Diffstat (limited to 'src/libpiano/piano.c')
-rw-r--r--src/libpiano/piano.c33
1 files changed, 14 insertions, 19 deletions
diff --git a/src/libpiano/piano.c b/src/libpiano/piano.c
index 72502f7..c496ea1 100644
--- a/src/libpiano/piano.c
+++ b/src/libpiano/piano.c
@@ -31,6 +31,7 @@ THE SOFTWARE.
#include "piano_private.h"
#include "piano.h"
+#include "crypt.h"
/* initialize piano handle
* @param piano handle
@@ -39,30 +40,24 @@ THE SOFTWARE.
PianoReturn_t PianoInit (PianoHandle_t *ph, const char *partnerUser,
const char *partnerPassword, const char *device, const char *inkey,
const char *outkey) {
+ PianoReturn_t ret = PIANO_RET_OK;
+
memset (ph, 0, sizeof (*ph));
ph->partner.user = strdup (partnerUser);
ph->partner.password = strdup (partnerPassword);
ph->partner.device = strdup (device);
- if (gcry_cipher_open (&ph->partner.in, GCRY_CIPHER_BLOWFISH,
- GCRY_CIPHER_MODE_ECB, 0) != GPG_ERR_NO_ERROR) {
- return PIANO_RET_GCRY_ERR;
- }
- if (gcry_cipher_setkey (ph->partner.in, (const unsigned char *) inkey,
- strlen (inkey)) != GPG_ERR_NO_ERROR) {
- return PIANO_RET_GCRY_ERR;
+ ret = PianoCryptInit (&ph->partner.in, inkey, strlen (inkey));
+ if (ret != PIANO_RET_OK) {
+ return ret;
}
- if (gcry_cipher_open (&ph->partner.out, GCRY_CIPHER_BLOWFISH,
- GCRY_CIPHER_MODE_ECB, 0) != GPG_ERR_NO_ERROR) {
- return PIANO_RET_GCRY_ERR;
- }
- if (gcry_cipher_setkey (ph->partner.out, (const unsigned char *) outkey,
- strlen (outkey)) != GPG_ERR_NO_ERROR) {
- return PIANO_RET_GCRY_ERR;
+ ret = PianoCryptInit (&ph->partner.out, outkey, strlen(outkey));
+ if (ret != PIANO_RET_OK) {
+ return ret;
}
- return PIANO_RET_OK;
+ return ret;
}
/* destroy artist linked list
@@ -178,8 +173,8 @@ static void PianoDestroyPartner (PianoPartner_t *partner) {
free (partner->password);
free (partner->device);
free (partner->authToken);
- gcry_cipher_close (partner->in);
- gcry_cipher_close (partner->out);
+ PianoCryptDestroy (partner->in);
+ PianoCryptDestroy (partner->out);
memset (partner, 0, sizeof (*partner));
}
@@ -267,8 +262,8 @@ const char *PianoErrorToStr (PianoReturn_t ret) {
return "Selected audio quality is not available.";
break;
- case PIANO_RET_GCRY_ERR:
- return "libgcrypt initialization failed.";
+ case PIANO_RET_CIPHER_ERR:
+ return "Cipher initialization failed.";
break;
/* pandora error messages */