]> git.meshlink.io Git - meshlink/commitdiff
Some more crypto wrapper functions are needed.
authorGuus Sliepen <guus@tinc-vpn.org>
Tue, 22 May 2007 23:41:22 +0000 (23:41 +0000)
committerGuus Sliepen <guus@tinc-vpn.org>
Tue, 22 May 2007 23:41:22 +0000 (23:41 +0000)
src/cipher.c
src/cipher.h
src/digest.c
src/digest.h

index 7e7b9f9275c38ce87097772e8aa70f4edfa9f6a8..61179078cbe88d605e1882d141c2c5eb6c1fdc4c 100644 (file)
@@ -156,6 +156,23 @@ void cipher_close(cipher_t *cipher) {
        }
 }
 
+size_t cipher_keylength(const cipher_t *cipher) {
+       return cipher->keylen + cipher->blklen;
+}
+
+void cipher_get_key(const cipher_t *cipher, void *key) {
+       memcpy(key, cipher->key, cipher->keylen + cipher->blklen);
+}
+
+bool cipher_set_key(cipher_t *cipher, void *key) {
+       memcpy(cipher->key, key, cipher->keylen + cipher->blklen);
+
+       gcry_cipher_setkey(cipher->handle, cipher->key, cipher->keylen);
+       gcry_cipher_setiv(cipher->handle, cipher->key + cipher->keylen, cipher->blklen);
+
+       return true;
+}
+
 bool cipher_regenerate_key(cipher_t *cipher) {
        gcry_create_nonce(cipher->key, cipher->keylen + cipher->blklen);
 
@@ -227,7 +244,10 @@ void cipher_reset(cipher_t *cipher) {
        gcry_cipher_setiv(cipher->handle, cipher->key + cipher->keylen, cipher->blklen);
 }
 
-int cipher_get_nid(cipher_t *cipher) {
+int cipher_get_nid(const cipher_t *cipher) {
        return cipher->nid;
 }
 
+bool cipher_active(const cipher_t *cipher) {
+       return cipher->nid != 0;
+}
index 522d7fb757b491af33c8f3a4c4a231bcb5772f75..45a4fc5a0ee1f61fd3806cd610025858e8ddb585 100644 (file)
@@ -32,13 +32,18 @@ typedef struct cipher {
        uint16_t blklen;
 } cipher_t;
 
-bool cipher_open_by_name(struct cipher *, const char *);
-bool cipher_open_by_nid(struct cipher *, int);
-bool cipher_open_blowfish_ofb(struct cipher *);
-void cipher_close(struct cipher *);
-bool cipher_regenerate_key(struct cipher *);
-bool cipher_encrypt(struct cipher *, void *indata, size_t inlen, void *outdata, size_t *outlen);
-bool cipher_decrypt(struct cipher *, void *indata, size_t inlen, void *outdata, size_t *outlen);
-int cipher_get_nid(struct cipher *);
+extern bool cipher_open_by_name(struct cipher *, const char *);
+extern bool cipher_open_by_nid(struct cipher *, int);
+extern bool cipher_open_blowfish_ofb(struct cipher *);
+extern void cipher_close(struct cipher *);
+extern size_t cipher_keylength(const struct cipher *);
+extern void cipher_get_key(const struct cipher *, void *);
+extern bool cipher_set_key(struct cipher *, void *);
+extern bool cipher_regenerate_key(struct cipher *);
+extern void cipher_reset(struct cipher *);
+extern bool cipher_encrypt(struct cipher *, void *indata, size_t inlen, void *outdata, size_t *outlen);
+extern bool cipher_decrypt(struct cipher *, void *indata, size_t inlen, void *outdata, size_t *outlen);
+extern int cipher_get_nid(const struct cipher *);
+extern bool cipher_active(const struct cipher *);
 
 #endif
index 98754ab207ed8e61cb7a608dea01d5ef68065bc8..50b0f238c4352d7c0eba77182b6ae5acece92b28 100644 (file)
@@ -127,7 +127,14 @@ bool digest_verify(digest_t *digest, void *indata, size_t inlen, void *cmpdata)
        return !memcmp(indata, outdata, digest->len);
 }
 
-int digest_get_nid(digest_t *digest) {
+int digest_get_nid(const digest_t *digest) {
        return digest->nid;
 }
 
+size_t digest_length(const digest_t *digest) {
+       return digest->len;
+}
+
+bool digest_active(const digest_t *digest) {
+       return digest->algo != GCRY_MD_NONE;
+}
index fa470c796d2b879ef232a3f301136b9e9e69eff2..dd9029e7dae9c5865bb985bf478e777bf932cf40 100644 (file)
@@ -33,8 +33,11 @@ typedef struct digest {
 bool digest_open_by_name(struct digest *, const char *);
 bool digest_open_by_nid(struct digest *, int);
 bool digest_open_sha1(struct digest *);
+void digest_close(struct digest *);
 bool digest_create(struct digest *, void *indata, size_t inlen, void *outdata);
 bool digest_verify(struct digest *, void *indata, size_t inlen, void *digestdata);
-int digest_get_nid(struct digest *);
+int digest_get_nid(const struct digest *);
+size_t digest_length(const struct digest *);
+bool digest_active(const struct digest *);
 
 #endif