2 * libopenemv - a library to work with EMV family of smart cards
3 * Copyright (C) 2015 Dmitry Eremin-Solenikov
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
21 #include "crypto_backend.h"
23 static struct crypto_backend
*crypto_backend
;
25 static bool crypto_init(void) {
29 crypto_backend
= crypto_polarssl_init();
37 struct crypto_hash
*crypto_hash_open(enum crypto_algo_hash hash
) {
38 struct crypto_hash
*ch
;
43 ch
= crypto_backend
->hash_open(hash
);
50 void crypto_hash_close(struct crypto_hash
*ch
) {
54 void crypto_hash_write(struct crypto_hash
*ch
, const unsigned char *buf
, size_t len
) {
55 ch
->write(ch
, buf
, len
);
58 unsigned char *crypto_hash_read(struct crypto_hash
*ch
) {
62 size_t crypto_hash_get_size(const struct crypto_hash
*ch
) {
63 return ch
->get_size(ch
);
66 struct crypto_pk
*crypto_pk_open(enum crypto_algo_pk pk
, ...) {
74 cp
= crypto_backend
->pk_open(pk
, vl
);
83 struct crypto_pk
*crypto_pk_open_priv(enum crypto_algo_pk pk
, ...) {
90 if (!crypto_backend
->pk_open_priv
)
94 cp
= crypto_backend
->pk_open_priv(pk
, vl
);
103 struct crypto_pk
*crypto_pk_genkey(enum crypto_algo_pk pk
, ...) {
104 struct crypto_pk
*cp
;
110 if (!crypto_backend
->pk_genkey
)
114 cp
= crypto_backend
->pk_genkey(pk
, vl
);
123 void crypto_pk_close(struct crypto_pk
*cp
) {
127 unsigned char *crypto_pk_encrypt(const struct crypto_pk
*cp
, const unsigned char *buf
, size_t len
, size_t *clen
) {
128 return cp
->encrypt(cp
, buf
, len
, clen
);
131 unsigned char *crypto_pk_decrypt(const struct crypto_pk
*cp
, const unsigned char *buf
, size_t len
, size_t *clen
) {
138 return cp
->decrypt(cp
, buf
, len
, clen
);
141 enum crypto_algo_pk
crypto_pk_get_algo(const struct crypto_pk
*cp
) {
148 size_t crypto_pk_get_nbits(const struct crypto_pk
*cp
) {
152 return cp
->get_nbits(cp
);
155 unsigned char *crypto_pk_get_parameter(const struct crypto_pk
*cp
, unsigned param
, size_t *plen
) {
158 if (!cp
->get_parameter
)
161 return cp
->get_parameter(cp
, param
, plen
);