+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
#include <openssl/err.h>
#include <openssl/sha.h>
#include <openssl/evp.h>
#include "crypto_if.h"
+static const char *ossl_init(void)
+{
+ ERR_load_crypto_strings();
+ return "openssl";
+}
+
static unsigned long ossl_encrypt(void *key, int keylen, void *iv,
void *pt, void *ct, int tlen)
{
return ERR_get_error();
if (!EVP_EncryptFinal(&ctx, ct + outlen1, &outlen2))
return ERR_get_error();
- if (outlen1 + outlen2 != tlen) return 1UL;
+ if (outlen1 + outlen2 != tlen) {
+ printf("enc tlen =%d outlen1=%d outlen2=%d\n",
+ tlen, outlen1, outlen2);
+ // return 1UL;
+ }
return 0UL;
}
return ERR_get_error();
if (!EVP_DecryptFinal(&ctx, ct + outlen1, &outlen2))
return ERR_get_error();
- if (outlen1 + outlen2 != tlen) return 1UL;
+ if (outlen1 + outlen2 != tlen) {
+ printf("dec tlen =%d outlen1=%d outlen2=%d\n",
+ tlen, outlen1, outlen2);
+ // return 1UL;
+ }
return 0UL;
}
if (!SHA1_Init(&sctx)) return ERR_get_error();
if (!SHA1_Update(&sctx, pt, tlen)) return ERR_get_error();
if (!SHA1_Final(tag, &sctx)) return ERR_get_error();
- *taglen = 160;
+ *taglen = 20;
return 0UL;
}
static unsigned long ossl_hmac(void *pt, int tlen, void *key, int keylen,
void *tag, int *taglen)
{
- HMAC_CTX hctx;
-
- HMAC_CTX_init(&hctx);
- if (!HMAC_Init(&hctx, key, keylen, EVP_sha1())) return ERR_get_error();
- if (!HMAC_Update(&hctx, pt, tlen)) return ERR_get_error();
- if (!HMAC_Final(&hctx, tag, (unsigned int *)taglen))
- return ERR_get_error();
- HMAC_CTX_cleanup(&hctx);
+ if (!HMAC(EVP_sha1(), key, keylen, pt, tlen,
+ tag, (unsigned int *)taglen))
+ return ERR_get_error();
return 0UL;
}
}
struct crypto_interface ossl_crypto_if = {
- .name = "openssl",
+ .init = ossl_init,
.encrypt = ossl_encrypt,
.decrypt = ossl_decrypt,
.hash = ossl_hash,