summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMichael Brown2009-02-18 23:27:34 +0100
committerMichael Brown2009-02-19 01:06:41 +0100
commitb4d3d686cc67c2503976ec4c854efc3a20519203 (patch)
treec194d6d6a4b6fb93fae56bc6ac9a81607048861d /src
parent[crypto] Split crypto_algorithm into {digest,cipher,pubkey}_algorithm (diff)
downloadipxe-b4d3d686cc67c2503976ec4c854efc3a20519203.tar.gz
ipxe-b4d3d686cc67c2503976ec4c854efc3a20519203.tar.xz
ipxe-b4d3d686cc67c2503976ec4c854efc3a20519203.zip
[crypto] Change cipher_{en,de}crypt() to void functions
It is a programming error, not a runtime error, if we attempt to use block ciphers with an incorrect blocksize, so use an assert() rather than an error status return.
Diffstat (limited to 'src')
-rw-r--r--src/crypto/cipher.c24
-rw-r--r--src/include/gpxe/crypto.h29
-rw-r--r--src/net/tls.c22
3 files changed, 25 insertions, 50 deletions
diff --git a/src/crypto/cipher.c b/src/crypto/cipher.c
deleted file mode 100644
index f83a6d0f..00000000
--- a/src/crypto/cipher.c
+++ /dev/null
@@ -1,24 +0,0 @@
-#include <stdint.h>
-#include <errno.h>
-#include <gpxe/crypto.h>
-
-int cipher_encrypt ( struct cipher_algorithm *cipher,
- void *ctx, const void *src, void *dst,
- size_t len ) {
- if ( ( len & ( cipher->blocksize - 1 ) ) ) {
- return -EINVAL;
- }
- cipher->encrypt ( ctx, src, dst, len );
- return 0;
-}
-
-int cipher_decrypt ( struct cipher_algorithm *cipher,
- void *ctx, const void *src, void *dst,
- size_t len ) {
- if ( ( len & ( cipher->blocksize - 1 ) ) ) {
- return -EINVAL;
- }
- cipher->decrypt ( ctx, src, dst, len );
- return 0;
-}
-
diff --git a/src/include/gpxe/crypto.h b/src/include/gpxe/crypto.h
index 42860a9e..10882d37 100644
--- a/src/include/gpxe/crypto.h
+++ b/src/include/gpxe/crypto.h
@@ -70,7 +70,6 @@ struct cipher_algorithm {
* @v src Data to encrypt
* @v dst Buffer for encrypted data
* @v len Length of data
- * @ret rc Return status code
*
* @v len is guaranteed to be a multiple of @c blocksize.
*/
@@ -82,7 +81,6 @@ struct cipher_algorithm {
* @v src Data to decrypt
* @v dst Buffer for decrypted data
* @v len Length of data
- * @ret rc Return status code
*
* @v len is guaranteed to be a multiple of @c blocksize.
*/
@@ -123,17 +121,30 @@ static inline void cipher_setiv ( struct cipher_algorithm *cipher,
cipher->setiv ( ctx, iv );
}
+static inline void cipher_encrypt ( struct cipher_algorithm *cipher,
+ void *ctx, const void *src, void *dst,
+ size_t len ) {
+ cipher->encrypt ( ctx, src, dst, len );
+}
+#define cipher_encrypt( cipher, ctx, src, dst, len ) do { \
+ assert ( ( len & ( (cipher)->blocksize - 1 ) ) == 0 ); \
+ cipher_encrypt ( (cipher), (ctx), (src), (dst), (len) ); \
+ } while ( 0 )
+
+static inline void cipher_decrypt ( struct cipher_algorithm *cipher,
+ void *ctx, const void *src, void *dst,
+ size_t len ) {
+ cipher->decrypt ( ctx, src, dst, len );
+}
+#define cipher_decrypt( cipher, ctx, src, dst, len ) do { \
+ assert ( ( len & ( (cipher)->blocksize - 1 ) ) == 0 ); \
+ cipher_decrypt ( (cipher), (ctx), (src), (dst), (len) ); \
+ } while ( 0 )
+
static inline int is_stream_cipher ( struct cipher_algorithm *cipher ) {
return ( cipher->blocksize == 1 );
}
-extern int cipher_encrypt ( struct cipher_algorithm *cipher,
- void *ctx, const void *src, void *dst,
- size_t len );
-extern int cipher_decrypt ( struct cipher_algorithm *cipher,
- void *ctx, const void *src, void *dst,
- size_t len );
-
extern struct digest_algorithm digest_null;
extern struct cipher_algorithm cipher_null;
extern struct pubkey_algorithm pubkey_null;
diff --git a/src/net/tls.c b/src/net/tls.c
index 024b45db..73f9ad06 100644
--- a/src/net/tls.c
+++ b/src/net/tls.c
@@ -1223,15 +1223,9 @@ static int tls_send_plaintext ( struct tls_session *tls, unsigned int type,
tlshdr->length = htons ( plaintext_len );
memcpy ( cipherspec->cipher_next_ctx, cipherspec->cipher_ctx,
cipherspec->cipher->ctxsize );
- if ( ( rc = cipher_encrypt ( cipherspec->cipher,
- cipherspec->cipher_next_ctx, plaintext,
- iob_put ( ciphertext, plaintext_len ),
- plaintext_len ) ) != 0 ) {
- DBGC ( tls, "TLS %p could not encrypt: %s\n",
- tls, strerror ( rc ) );
- DBGC_HD ( tls, plaintext, plaintext_len );
- goto done;
- }
+ cipher_encrypt ( cipherspec->cipher, cipherspec->cipher_next_ctx,
+ plaintext, iob_put ( ciphertext, plaintext_len ),
+ plaintext_len );
/* Free plaintext as soon as possible to conserve memory */
free ( plaintext );
@@ -1393,14 +1387,8 @@ static int tls_new_ciphertext ( struct tls_session *tls,
}
/* Decrypt the record */
- if ( ( rc = cipher_decrypt ( cipherspec->cipher,
- cipherspec->cipher_ctx, ciphertext,
- plaintext, record_len ) ) != 0 ) {
- DBGC ( tls, "TLS %p could not decrypt: %s\n",
- tls, strerror ( rc ) );
- DBGC_HD ( tls, ciphertext, record_len );
- goto done;
- }
+ cipher_decrypt ( cipherspec->cipher, cipherspec->cipher_ctx,
+ ciphertext, plaintext, record_len );
/* Split record into content and MAC */
if ( is_stream_cipher ( cipherspec->cipher ) ) {